首页 > 系统相关 >Linux中Kill进程的N种方法(转)

Linux中Kill进程的N种方法(转)

时间:2023-07-13 23:31:43浏览次数:30  
标签:11 00 firefox smx kill Linux 进程 Kill


long long ago,曾有一个想法,就是完全脱离windows,使用linux生活、工作。以前迫于各种专业工具不支持linux,只能无奈的使用xp。最近工作内 容是android移植+单片机开发,android就不说了,必须用linux开发。单片机也找到一些linux的工具,于是乎有不少时间是在 linux上进行开发工作。自然而然的,经常要进程管理。linux的进程管理手段丰富。想怎么杀进程都可以。废话少说,正题开始:

常规篇:

首先,用ps查看进程,方法如下:



 


1. $ ps -ef  
2.   
3. ……  
4. smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal  
5. smx       1823  1822  0 11:38 ?        00:00:00 gnome-pty-helper  
6. smx       1824  1822  0 11:38 pts/0    00:00:02 bash  
7. smx       1827     1  4 11:38 ?        00:26:28 /usr/lib/firefox-3.6.18/firefox-bin  
8. smx       1857  1822  0 11:38 pts/1    00:00:00 bash  
9. smx       1880  1619  0 11:38 ?        00:00:00 update-notifier  
10. ……  
11. smx      11946  1824  0 21:41 pts/0    00:00:00 ps -ef


或者:



 



    1. $ ps -aux  
    2.   
    3. ……  
    4.   
    5. smx       1822  0.1  0.8  58484 18152 ?        Sl   11:38   0:49 gnome-terminal  
    6. smx       1823  0.0  0.0   1988   712 ?        S    11:38   0:00 gnome-pty-helper  
    7. smx       1824  0.0  0.1   6820  3776 pts/0    Ss   11:38   0:02 bash  
    8. smx       1827  4.3  5.8 398196 119568 ?       Sl   11:38  26:13 /usr/lib/firefox-3.6.18/firefox-bin  
    9. smx       1857  0.0  0.1   6688  3644 pts/1    Ss   11:38   0:00 bash  
    10. smx       1880  0.0  0.6  41536 12620 ?        S    11:38   0:00 update-notifier  
    11. ……  
    12. smx      11953  0.0  0.0   2716  1064 pts/0    R+   21:42   0:00 ps -aux



    此时如果我想杀了火狐的进程就在终端输入:

     



     

    1. $ kill -s 9 1827




     

    其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其作用见附录。

    1827则是上面ps查到的火狐的PID。

    简单吧,但有个问题,进程少了则无所谓,进程多了,就会觉得痛苦了,无论是ps -ef 还是ps -aux,每次都要在一大串进程信息里面查找到要杀的进程,看的眼都花了。

    进阶篇:

    改进1:

    把ps的查询结果通过管道给grep查找包含特定字符串的进程。管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。

     


     

     

    1. $ ps -ef | grep firefox  
    2. smx       1827     1  4 11:38 ?        00:27:33 /usr/lib/firefox-3.6.18/firefox-bin  
    3. smx      12029  1824  0 21:54 pts/0    00:00:00 grep --color=auto firefox

    这次就清爽了。然后就是

     




    1. $kill -s 9 1827




     

    还是嫌打字多?

    改进2——使用pgrep:

    一看到pgrep首先会想到什么?没错,grep!pgrep的p表明了这个命令是专门用于进程查询的grep。

     



     

    1. $ pgrep firefox  
    2. 1827



     

    看到了什么?没错火狐的PID,接下来又要打字了:

     


    1. $kill -s 9 1827




     

    改进3——使用pidof:

    看到pidof想到啥?没错pid of xx,字面翻译过来就是 xx的PID。

     


    1. $ pidof firefox-bin  
    2. 1827


    和pgrep相比稍显不足的是,pidof必须给出进程的全名。然后就是老生常谈:

     

     


    1. $kill -s 9 1827




     

    无论使用ps 然后慢慢查找进程PID 还是用grep查找包含相应字符串的进程,亦或者用pgrep直接查找包含相应字符串的进程PID,然后手动输入给kill杀掉,都稍显麻烦。有没有更方便的方法?有!

    改进4:

     




    1. $ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9


     

    说明:

    “grep firefox”的输出结果是,所有含有关键字“firefox”的进程。

    “grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。

    “cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。

    “xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。

    难道你不想抱怨点什么?没错太长了

    改进5:

    知道pgrep和pidof两个命令,干嘛还要打那么长一串!

     




    1. $ pgrep firefox | xargs kill -s 9



     

    改进6:

     



    1. $ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9  
    2. kill: No such process



     

    有一个比较郁闷的地方,进程已经正确找到并且终止了,但是执行完却提示找不到进程。

    其中awk '{print $2}' 的作用就是打印(print)出第二列的内容。根据常规篇,可以知道ps输出的第二列正好是PID。就把进程相应的PID通过xargs传递给kill作参数,杀掉对应的进程。

    改进7:

    难道每次都要调用xargs把PID传递给kill?答案是否定的:

     



    1. $kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`


     

    改进8:

    没错,命令依然有点长,换成pgrep。

     



    1. $kill -s 9 `pgrep firefox`



     

    改进9——pkill:

    看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。

     


    1. $pkill -9 firefox


     

    说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill的信号直接跟在 “-“ 后面,“-sxx”不是用来传递信号。之前我一直以为是 "-s 9",结果每次运行都无法终止进程。

    改进10——killall:

    killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。

     



      1. $killall -9 firefox



       

      总结:

      1、

      1)kill传递给要终止的进程的信号,实际上是POSIX信号,它们在signal.h里面定义附录摘录了部分POSIX信号,及其相关说明。支持两种方式传递终止信号:



      1. (1)kill -s signal PID  
      2. 比如  
      3. $ kill -s 9 1234


       

      (2)kill -signal PID

      $kill -9 1234

      2)kill传递的信号也支持两种表示方式:信号名和信号数:

      kill -s 9 1234 和kill -s KILL 1234 (SIGKILL)

      kill -15 1234 和kill -TERM 1234 (SIGTERM)

      当然其他信号也可以这样表示。

      2、

      上面各种改进方法,设计到的技巧,有两个在其他地方也有借鉴意义。

      1)、进程号的获取部分

      用awk提取第2列或者用cut提取第8-15个字母。其他地方也可一用awk提取第n列,或者用cut提取第m-第n哥字母。

      2)、进程号的传递

      用xargs把进程号传递给后面的kill做参数运行;

      直接用两个“`”(“~”下面那个后单引号)把命令放到对应参数的位置来传递参数。

       

      附录:各种信号及其用途

      信号

      描述

      Linux x86[1]

      SIGABRT

      进程退出

      6

      SIGALRM

      计时器到时

      14

      SIGBUS

      总线错误,进入内存对象未定义部分

      7

      SIGCHLD

      子进程终止,停止或继续

      17

      SIGCONT

      继续,如果停止

      18

      SIGFPE

      浮点指针异常,错误的算数操作。

      8

      SIGHUP

      挂起

      1

      SIGILL

      非法指令

      4

      SIGINT

      中断

      2

      SIGKILL

      杀死(尽快终止)

      9

      SIGPIPE

      无读操作时写入管道。

      13

      SIGQUIT

      退出并转储核心

      3

      SIGSEGV

      段非法

      11

      SIGSTOP

      临时停止执行

      19

      SIGTERM

      终止(要求终止)

      15

      SIGTSTP

      由信号终止

      20

      SIGTTIN

      后台进程试图从TTY 读入 ("in")

      21

      SIGTTOU

      后台进程试图写入TTY ("out")

      22

      SIGUSR1

      用户定义1

      10

      SIGUSR2

      用户定义2

      12

      SIGPOLL

      Pollable event

      29

      SIGPROF

      统计分布图用计时器到时

      27

      SIGSYS

      不良的系统调用

      31

      SIGTRAP

      跟踪/断点 陷阱

      5

      SIGURG

      I/O紧急信号,套接字紧急数据有效

      23

      SIGVTALRM

      虚拟定时器超时

      26

      SIGXCPU

      超出CPU时间限制

      24

      SIGXFSZ

      超出文件大小限制

      25

       


       

       

      标签:11,00,firefox,smx,kill,Linux,进程,Kill
      From: https://blog.51cto.com/u_16187922/6717181

      相关文章

      • linux环境用mysqldump定时备份Mysql数据
        每日备份mysql的数据,并保留一定数量的备份文件一、Mysql备份脚本backup.shvibackup.sh#!/bin/bash#保存备份个,备份31天的数据number=31#备份保存路径backup_dir=/home/mysql/data/mysqlbackup#日期dd=`data+%Y-%m-%d-%H-%M-%S`#备份工具tool=mysqldump#用户......
      • linux下wifi的sta和ap操作
        前言在linux开发中wifi是很常见的一个工作,wifi有STA模式和AP模式,今天分享下如何使用工具在Linux中控制wifi。作者:良知犹存转载授权以及围观:欢迎关注微信公众号:羽林君或者添加作者个人微信:become_me介绍今天介绍的是AP和STA的wifi模式控制,AP热点模式使用到了hostapd和轻量......
      • linux 中awk命令的几个常用算数函数
         001、幂函数(即e的多少次方)[root@PC1test02]#lsa.txt[root@PC1test02]#cata.txt##测试数据91210[root@PC1test02]#awk'{printexp($1)}'a.txt##幂函数8103.082.718287.3890622026.5 02、自然对数(e的多少次方等于x)[root@PC1test02......
      • idea重启进程慢
        最近我有个朋友朋友遇到idea重启进程慢的问题,重启进程的时候需要等待近两分钟才会退出进程,现在说一下这个的解决办法。打开idea,左上角File-Setting-Build,Execution,Deployment-Debugger勾选Killthedebugprocessimmediately,如图所示。......
      • 在 Oracle Linux 上安装 Shared Folders
        在OracleLinux上安装SharedFolders对于OracleDatabase11g,ZIP安装文件总共有2GB多。由于需要从每个来宾VM访问它们以安装数据库,我决定利用OracleVMVirtualBox的SharedFolders。SharedFolders特性允许来宾VM访问主机文件系统中的存储......
      • Linux C语言之时间函数精讲
        @TOC当在LinuxC语言编程中需要处理时间相关的操作时,可以使用时间函数。时间函数提供了获取当前时间、进行时间转换和计算时间差等功能,对于日志记录、性能分析以及定时任务等场景非常有用。本文将详细介绍LinuxC语言中常用的时间函数,包括如何使用它们以及示例代码。前言在Lin......
      • 杀死进程
        ps-ef在Linux中,ps命令用于显示当前运行的进程列表。ps-ef命令可以列出所有进程的详细信息,包括进程的PID(进程ID)、PPID(父进程ID)、CPU使用率、内存使用率、进程启动时间、进程状态等。具体解释如下:UID:该进程的用户ID。PID:该进程的进程ID。PPID:该进程的父进程ID。C:该进程的CP......
      • WLS2安装及挂载linux硬盘
        WSL2安装管理员权限运行powershell/cmdwsl--install#安装默认版本ubuntu拉取的时候建议挂个科技不然会失败wsl--list--online#以查看可用发行版列表wsl--install-d<DistroName>#以安装发行版WSL2卸载发行版wsl--unregister<DistributionName>WSL挂载linu......
      • 1 Linux系统编程入门
        1Linux系统编程入门1.1Linux开发环境搭建我使用的是阿里云2核2G的服务器1年108元设置服务器root密码,重启服务器root用户登录,进行添加新用户注册自己使用的用户sudouseradd-r-m-s/bin/bashtset#tset是用户名其中参数的意义如下:-r:建立系统账号-m:自动建立用户的......
      • 1.3 Linux文件系统
        一、Linux文件系统结构Linux下都是文件,所以没有Windows一样的盘,有的只有文件夹。cd/    //进入根目录ls     //查看根目录"/"下的文件及文件夹/bin   :存储了很多系统命令,/usr/sbin也存储了许多系统命令。/sbin  :超级用户root的根目录文件。/root......