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