Shell脚本捕获进程ID并杀死它,如果存在

我试过这个代码,它不工作

#!/bin/sh #Find the Process ID for syncapp running instance PID=`ps -ef | grep syncapp 'awk {print $2}'` if [[ -z "$PID" ]] then Kill -9 PID fi 

它在awk附近显示错误。

任何build议,请。

其实最简单的方法就是传递如下的kill参数:

 ps -ef | grep your_process_name | grep -v grep | awk '{print $2}' | xargs kill 

希望能帮助到你。

这对我有好处。

 PID =`ps -eaf |  grep syncapp |  grep -v grep |  awk'{print $ 2}'`
 if [[“”!=“$ PID”]]; 然后
  回声“杀死$ PID”
   kill -9 $ PID
科幻

你可能想写

 `ps -ef | grep syncapp | awk '{print $2}'` 

但我会认可@ PaulR的答案 – killall -9 syncapp是一个更好的select。

我使用命令pkill这个:

 NAME pgrep, pkill - look up or signal processes based on name and other attributes SYNOPSIS pgrep [options] pattern pkill [options] pattern DESCRIPTION pgrep looks through the currently running processes and lists the process IDs which match the selection criteria to stdout. All the criteria have to match. For example, $ pgrep -u root sshd will only list the processes called sshd AND owned by root. On the other hand, $ pgrep -u root,daemon will list the processes owned by root OR daemon. pkill will send the specified signal (by default SIGTERM) to each process instead of listing them on stdout. 

如果你的代码通过解释器(java,python,…)运行,那么进程的名字就是解释器的名字。 你需要使用参数 – 完整。 这匹配命令名称和参数。

许多* NIX系统也有或者两个pkill(1)和killall(1) ,它们允许你通过名字杀死进程。 使用它们,可以避免整个parsingps问题。

 PID=`ps -ef | grep syncapp 'awk {print $2}'` if [[ -z "$PID" ]] then **Kill -9 $PID** fi 

来到某个地方..认为它是简单而有用的

你可以直接使用crontab中的命令,

 * * * * * ps -lf | grep "user" | perl -ane '($h,$m,$s) = split /:/,$F +[13]; kill 9, $F[3] if ($h > 1);' 

或者,我们可以把它写成shell脚本,

 #!/bin/sh # longprockill.sh ps -lf | grep "user" | perl -ane '($h,$m,$s) = split /:/,$F[13]; kill + 9, $F[3] if ($h > 1);' 

并像这样调用它的crontab,

 * * * * * longprockill.sh 
 #!/bin/sh #Find the Process ID for syncapp running instance PID=`ps -ef | grep syncapp 'awk {print $2}'` if [[ -z "$PID" ]] then ---> Kill -9 PID fi 

不知道这是否有帮助,但“杀”不拼写正确。 它是大写的。

尝试“杀”,而不是。

这应该杀死所有匹配你被允许杀死的grep的进程。

-9表示“杀死所有可以杀死的进程”。

 kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}') 
 Kill -9 PID 

应该

 kill -9 $PID 

看到不同?

尝试以下脚本:

 #!/bin/bash pgrep $1 2>&1 > /dev/null if [ $? -eq 0 ] then { echo " "$1" PROCESS RUNNING " ps -ef | grep $1 | grep -v grep | awk '{print $2}'| xargs kill -9 } else { echo " NO $1 PROCESS RUNNING" };fi