我正在编写一个脚本来杀死同一进程的所有实例。由于它将用于Linux,AIX,HP-UX和Solaris,我只需要使用内置的bash(sh)函数。这就是为什么killall
,pkill
等不适合我。计算进程数并杀死它们
一旦只有一个,应该在传统的方式刚刚杀了一个过程的实例:
kill -TERM `ps -ef | grep -v grep | grep $process | awk '{print $2}'`
但是有时候程序额外的实例上运行,这就是为什么ps -ef | …
回报比一个PID多。这需要报告。
例如:
bash-3.2$ ps -ef | grep -v grep | grep perl | awk '{print $2}'
5267
5268
5269
5270
5271
我的想法是为这些值存储在临时变量,然后发送终止信号,以各自在for循环。
bash-3.2$ tmp=`ps -ef | grep -v grep | grep perl | awk '{print $2}'`
bash-3.2$ echo $tmp
5267 5268 5269 5270 5271
但是,如果发生这样的情况(有多少实例存在),我仍然需要这些信息。 看来我需要检查存储在tmp
变量中的整个字符串,并可能计数空格吗?
无论如何,这些问题会减少到如何检查$tmp
变量存储多少个值?
你可以只用一个计数器在循环告诉你如家快捷很多特效被打死。 – John3136
'ps -ef'是否便携? –
@glennjackman [是](http://pubs.opengroup.org/onlinepubs/7990989775/xcu/ps.html)(但在当前POSIX + OpenGroup规范中标记为XSI)。 – Gilles