kill是啥
通过 man kill 可以看到,kill命令的作用为发送一个信号量给程序。
不带参数时,发送的信号量为SIGTERM,SIG是signal(信号)的缩写,TERM是terminate(终止)的缩写,所以kill默认参数是结束进程。
kill -9时,发送的信号量为SIGKILL,此信号量与SIGTERM不同,他不能被程序捕获或者忽略,所以有些使用默认参数不能结束的进程可以使用-9 参数结束掉。
kill - 18 -19两个信号量分别为SIGCONT和SIGSTOP信号量,用来启动和暂停(可用于杀毒时有进程监控的情况)一个进程。
进程与信号量
uninterruptible sleep 状态的进程不接受信号量,故不能使用kill命令杀掉。一般此状态的进程是由于在等待IO资源而处于Disk Sellp状态。
ps aux 的state列标志位D时,表示此进程处于uninterruptible sleep 状态。vmstat的b列,表示系统中处于uninterruptible sleep 状态进程的总数。正常情况下应为0.
ps aux 的state列标志位Z时,表示进程时僵尸进程,僵尸进程不占用CPU,内存等资源,但会占用系统可用的PID,短暂的僵尸进程不必理会,但大量增多时需关注。杀掉僵尸进程的方法时干掉他的父进程。
ps axu 的state列标志位T时,表示进程接受了SIGSTOP信号,处于暂停状态。
kill的信号量数字转化
kill -l 18可以查看18的信号量是SIGCONT。
nohup的作用
终端退出时,会给终端中的进程发送SIGHUP信号量,导致进程退出,使用nohup启动的进程可以忽略SIGHUP信号量。