kill
转: kill-1
:重新读取一次参数的配置文件 (类似 reload)
这句话给我的感觉是把进程杀掉后重启进程,即 reload。而我查了下 man kill,-1 对应的 signal 是 SIGHUP,用个
find / -perm +7000 > /dev/null 2>&1 &
命令试验了下确实是杀进程,鸟哥说反了?
-
SIGHUP - hangup or exit a foreground running process from a terminal
原因:
对daemon是重新读取配置,对普通进程就是杀掉。
HUP 信号是可拦截的,拦截后你可以做任何事情
一般的守护进程都会在收到这个信号时重新加载配置。
这是一个习惯,因为 SIGHUP 本来的意义对守信进程没有意义(SIGHUP 是当控制终端失去连接时触发的信号,而守护进程没有控制终端,所以根本用不上)。
http://segmentfault.com/q/1010000002537875
说明:
TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程(比如键盘Ctrl+c停止应用没反应)。
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
kill -s 指定信号
kil -0
kill -0 pid 不发送任何信号,不会结束进程,但是系统会进行错误检查。
所以经常用来检查一个进程是否存在,存在返回0;不存在返回1
kill -0 $pid # 比如:killall -0 nginx
if [ $? -gt 0 ]
echo "进程$pid存在"
else
echo "进程$pid不存在"
fi
kill -9
一般的,需要使用kill -15(就是默认的kill)去尝试杀死进程。如果过一段时间(比如10秒),进程还没有停止,kill -9才会出场。
HUP 有两种常见的解释。第一种,它被许多守护进程理解为一个重置的请求。如果
一个守护进程不用重新启动就能够重新读取它自己的配置文件并调整自己以适应
变化,那么 HUP 信号通常可以用来触发这种行为。第二种,HUP 信号有时候由终
端驱动程序生成,试图用来“清除”(也就是“杀死”)跟某个特定终端相关联的那
些进程。例如,当一个终端会话结束时,或者当一个调制解调器连接被不经意地断
开(因而得名为“挂断”)时,就可能出现这种情况。
kill -HUP pid(mysql进程号)//重新加载配置文件,pid号不会改变推荐
kill -STOP pid #挂起进程(冻结进程停止,不是杀死进程)
kill -CONT pid # 继续运行冻结的进程
skill -STOP httpd # 冻结所有httpd进程
skil -CONT httpd # 继续运行冻结的httpd进程
kill -USR2 pid //平滑重启进程号改变,会杀掉
kill -USR2 php旧进程号 平滑加载 如果这儿的旧进程号是nginx.pid
killall
后台服务需要不间断运行,意外退出后,需要将其重新拉起。常常可以通过向进程发送信号0,然后根据返回值来判断一个进程是否存在。比如进程名字为A,那么
exsit="killall -0 A;echo $?"
exsit为0就表示进程A存在,否则表示不存在。
然而,当有多个进程名字都是A的时候,只有在全部名字为A的进程都退出后,exsit才非0,所以这种监控方法并不太适合多进程环境(为了负载均衡,服务器常常采用多进程)。
1,杀死所有的 Apache Web 服务器进程
killall httpd
2,killall 命令不带参数,只杀死当前用户的所有进程。以 root 身份执行这条命令会杀死 init 并关机。
killall
3,面这条命令向所有以用户 ben 身份运行的进程发一个 TERM 信号(默认)
pkill -u ben
这个USER1和2都可以用户自定义的
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
kill -0 "$pid" 2>/dev/null
检查一个进程是否存在,存在返回0;不存在返回1
僵尸进程
僵尸进程本身就已经退出了,系统会把该进程的状态变成Zombie,然后给上一定的时间等着父进程来收集其退出信息,因为可能父进程正忙于别的事情来不及收集,所以,使用Zombie状态表示进程退出了,正在等待父进程收集信息中。
Zombie进程不可以用kill命令清除,因为进程已退出,如果需要清除这样的进程,那么需要清除其父进程,或是等很长的时间后被内核清除。因为Zombie的进程还占着个进程ID号呢,这样的进程如果很多的话,不利于系统的进程调度。
僵尸进程是已经执行完毕但还没有让它们的状态被收集起来的进程。如果看到有僵尸进程挂在那里,那么就要用 ps 查看它们的 PPID,找出它们的来源。
ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'
如何杀死僵尸进程呢?
一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9
或
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`