今天看脚本遇到两种杀死进程的命令:
kill -9 `ps aux | grep "$agent_name" | grep -v "grep"| awk '{print $2}'`
killall -9 $agent_name > /dev/null 2>&1
研究一番。发现杀死进程有好几种方法。首先看一下查看进程的ps的两种用法。Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux。ps aux最初用到Unix Style中,而ps -ef被用在SystemV Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
1、kill
默认参数下,kill 发送SIGTERM(15)信号给进程,告诉进程需要被关闭,自行停止运行并退出。这个是杀死进程最安全的方法。
2、kill -9
表示强制杀死该进程,与SIGTERM相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理。
3、pkill
pkill 表示 pgrep+kill ,pgrep表明了这个命令是专门用于进程查询的grep。pkill或者pgrep只要给出进程名的一部分就可以终止进程。
4、killall
杀死同一进程组内的所有进程,与 kill 不同的是它会杀死指定名字的所有进程。其允许指定要终止的进程的名称,而非PID。killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。
利用什么的命令该怎么杀死进程呢?统一用kill来演示。
kill `ps aux | grep "$agent_name" | grep -v grep| awk '{print $2}'`
kill $(ps aux | grep "$agent_name" | grep -v grep| awk '{print $2}')
ps aux | grep "$agent_name" | grep -v "grep"| awk '{print $2}' | xargs kill
kill `pgrep "$agent_name"`
pgrep "$agent_name" | xargs kill
kill `pidof "$agent_name"`
pidof "$agent_name" | xargs kill
pkill "$agent_name"
killall "$agent_name"
网友评论