我使用下面的命令获取pid。 “A”是应用程序名称并用作参数。我像./stop A
那样运行我的脚本PID=`ps -ef | grep A| grep -v grep | awk '{print$2}'`
这也是捕捉“ / bin / ksh ./stop A ”过程。但我不想要。 我只想要捕获“ A ”的过程,而不是 PID /
中我的脚本过程我的脚本下面有kill命令,它正在杀死我正在运行的脚本:(
kill -9 $PID
它也会杀死/bin/ksh ./stop A
本身的pid,脚本会在此时停止。
这适用于AIX。如何避免杀死脚本本身。
注意:当我使用相同的脚本进行相同的工作但没有通过参数时,它会很好。我相信,显而易见的是,通过脚本传递参数是创建其他pid,并且对于同一个应用程序,它会执行grep和kill。
答案 0 :(得分:0)
有一个名为pidof
的实用程序,它列出了具有给定名称的程序实例的PID。它可以在大多数Linux机器上使用,所以它也可以在AIX上使用吗?
从手册页:
Pidof finds the process id's (pids) of the named programs.
It prints those id's on the standard output.
也:
When pidof is invoked with a full pathname to the program
it should find the pid of, it is reasonably safe.
Otherwise it is possible that it returns pids of running
programs that happen to have the same name as the program
you're after but are actually other programs.
答案 1 :(得分:0)
如果停止A是你所谓的杀戮的脚本,你可以做
for p in $PID
do
test $p -ne $$ && kill -9 $p
done
请注意,包含A的所有其他进程仍然存在风险,您可以添加grep -w
A来限制A是单个单词的那些
修改或没有循环
kill -9 $( ps -ef|grep -w A |grep -v -w $$ | grep -v grep | awk '{print $2}' )
(这里grep -v grep应该是不必要的)