linux系统网络命令(五)

一、pidof命令

1、简介

        pidof命令用于找出正在运行的程序的进程PID(find the process ID of a running program.),程序可以是一个二进制执行程序,也可以是一个shell脚本。


2、常用选项

-s:仅返回一个进程号;

-c:仅显示具有相同“root”目录的进程;

-x:显示由脚本开启的进程;

-o:指定不显示的进程ID。


3、使用举例

3.1、找出nginx程序的进程PID,如果有多个就会全部列出,nginx不能是shell脚本名称。

[root@hpf-linux ~]# pidof -c nginx
1083 1081

3.2、在列出的进程PID中忽略omitpid,可以有多个。

[root@hpf-linux ~]# pidof -o 1083 nginx
1081


        pidof命令的使用比较简单,这里就不多列举了,下去自己敲几下命令就会了。


二、pgrep命令

1、命令简介

        pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。


2、常用选项

-o:仅显示找到的最小(起始)进程号; 
-n:仅显示找到的最大(结束)进程号; 
-l:显示进程名称; 
-P:指定父进程号; 
-t:指定开启进程的终端; 
-U Username:仅显示指定用户的进程的进程的PID 
-G Groupname:仅显示指定用户组的进程的进程的PID


3、使用举例

3.1、显示进程名和PID

[root@hpf-linux ~]# pgrep -l php-fpm
1088 php-fpm
1089 php-fpm
1090 php-fpm

3.2、显示最小的进程名和PID

[root@hpf-linux ~]# pgrep -lo php-fpm
1088 php-fpm

3.3、显示以root用户执行的进程及PID号

[root@hpf-linux ~]# pgrep -lU root
1 init
2 kthreadd
3 migration/0
4 ksoftirqd/0
.........................


三、pkill命令

1、简介

        pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。


2、应用举例

[root@hpf-linux ~]# pgrep nginx
1081
1083
[root@hpf-linux ~]# pkill nginx
[root@hpf-linux ~]# ps aux |grep nginx
root      1769  0.0  0.0   5980   744 pts/1    S+   22:40   0:00 grep nginx


四、kiil命令

1、简介

        kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。


2、常用选项

-a:当处理当前进程时,不限制命令名和进程号的对应关系;

-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;

-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;

-s <信息名称或编号>:指定要送出的信息;

-u:指定用户。


3、应用举例

3.1、常用的几个信号介绍

[root@hpf-linux ~]# kill -l
 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1
 11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
 16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
...................................

1)SIGHUP :本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。

2)SIGINT :程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

3)SIGQUIT :和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。

9)SIGKILL :用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。

15)SIGTERM :若没有信号码就默认使用此信号码。程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。

18) SIGCONT :让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符... 

19) SIGSTOP :停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略。


3.2、kill pid与kill -9 pid的区别

[root@hpf-linux ~]# ps aux |grep php-fpm
root      1088  0.0  0.2  28928  2856 ?        Ss   14:39   0:02 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)                                                                            
php-fpm   1089  0.0  0.2  28928  2608 ?        S    14:39   0:00 php-fpm: pool www                                                                                                                        
php-fpm   1090  0.0  0.2  28928  2608 ?        S    14:39   0:00 php-fpm: pool www                                                                                                                        
root      1827  0.0  0.0   5980   744 pts/0    S+   23:09   0:00 grep php-fpm
[root@hpf-linux ~]# kill 1089
[root@hpf-linux ~]# ps aux |grep php-fpm
root      1088  0.0  0.2  28928  2880 ?        Ss   14:39   0:02 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)                                                                            
php-fpm   1090  0.0  0.2  28928  2608 ?        S    14:39   0:00 php-fpm: pool www                                                                                                                        
php-fpm   1828  0.0  0.2  28928  2612 ?        S    23:10   0:00 php-fpm: pool www                                                                                                                        
root      1830  0.0  0.0   5980   744 pts/0    S+   23:10   0:00 grep php-fpm
[root@hpf-linux ~]# kill 1090
[root@hpf-linux ~]# ps aux |grep php-fpm
root      1088  0.0  0.2  28928  2880 ?        Ss   14:39   0:02 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)                                                                            
php-fpm   1828  0.0  0.2  28928  2612 ?        S    23:10   0:00 php-fpm: pool www                                                                                                                        
php-fpm   1831  0.0  0.2  28928  2612 ?        S    23:10   0:00 php-fpm: pool www                                                                                                                        
root      1833  0.0  0.0   5980   744 pts/0    S+   23:10   0:00 grep php-fpm

        通过上面的例子可以看出不带信号码和使用信号码-9咋一看所带来的效果差不多,但是它俩还是有区别的:

        kill pid的作用是向进程号为pid的进程发送SIGTERM(15)(这是kill默认发送的信号),该信号是一个结束进程的信号且可以被应用程序捕获。若应用程序没有捕获并响应该信号的逻辑代码,则该信号的默认动作是kill掉进程。这是终止指定进程的推荐做法。

        kill -9 pid则是向进程号为pid的进程发送SIGKILL(该信号的编号为9),从本文上面的说明可知,SIGKILL既不能被应用程序捕获,也不能被阻塞或忽略,其动作是立即结束指定进程。通俗地说,应用程序根本无法“感知”SIGKILL信号,它在完全无准备的情况下,就被收到SIGKILL信号的操作系统给干掉了,显然,在这种“暴力”情况下,应用程序完全没有释放当前占用资源的机会。事实上,SIGKILL信号是直接发给init进程的,它收到该信号后,负责终止pid指定的进程。一般不建议使用kill -9,若在线上的机器使用此命令终止进程会造成未知的数据问题,在某些情况下(如进程已经hang死,无法响应正常信号),就可以使用kill -9来结束进程。


 3.3、不可杀死的进程init

[root@hpf-linux ~]# ps aux |grep init
root         1  0.0  0.1   2900  1408 ?        Ss   14:38   0:01 /sbin/init
root      1835  0.0  0.0   5984   748 pts/0    S+   23:22   0:00 grep init
[root@hpf-linux ~]# kill -9 1
[root@hpf-linux ~]# ps aux |grep init
root         1  0.0  0.1   2900  1408 ?        Ss   14:38   0:01 /sbin/init
root      1837  0.0  0.0   5984   752 pts/0    S+   23:22   0:00 grep init

说明:

        init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 其它所有进程都是init进程的子孙。init进程是不可杀的! 


五、killall命令

1、简介

        killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。


2、常用选项

-Z 只杀死拥有scontext 的进程

-e 要求匹配进程名称

-I 忽略小写

-g 杀死进程组而不是进程

-i 交互模式,杀死进程前先询问用户

-l 列出所有的已知信号名称

-q 不输出警告信息

-s 发送指定的信号

-v 报告信号是否成功发送

-w 等待进程死亡

          -u  杀死指定用户的进程

          -I  忽略大小写


3、应用举例

杀死所有同名进程:

[root@hpf-linux ~]# ps aux |grep php-fpm
root      1088  0.0  0.2  28928  2880 ?        Ss   14:39   0:02 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)                                                                            
php-fpm   1828  0.0  0.2  28928  2612 ?        S    23:10   0:00 php-fpm: pool www                                                                                                                        
php-fpm   1831  0.0  0.2  28928  2612 ?        S    23:10   0:00 php-fpm: pool www                                                                                                                        
root      1859  0.0  0.0   5980   744 pts/0    S+   23:32   0:00 grep php-fpm
[root@hpf-linux ~]# killall php-fpm
[root@hpf-linux ~]# ps aux |grep php-fpm
root      1862  0.0  0.0   5980   744 pts/0    S+   23:32   0:00 grep php-fpm


你可能感兴趣的:(linux,kill,pidof,pgrep,pkill,killall)