76

我试过这段代码,但它不工作

#!/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 附近显示错误。

请有任何建议。

4

11 回答 11

187

实际上,最简单的方法是传递如下 kill 参数:

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

希望能帮助到你。

于 2013-04-09T08:16:49.437 回答
20

这对我很有用。

PID=`ps -eaf | grep 同步应用程序 | grep -v grep | awk '{打印 $2}'`
如果 [[ "" != "$PID" ]]; 然后
  回声“杀死$PID”
  杀死 -9 $PID
菲
于 2014-12-04T20:00:01.717 回答
15

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、...)运行,那么进程的名称就是解释器的名称。您需要使用参数--full。这与命令名称和参数匹配。

于 2016-05-26T10:14:24.890 回答
5

你可能想写

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

但我会赞同@PaulR 的回答 -killall -9 syncapp是一个更好的选择。

于 2012-12-17T07:46:01.367 回答
1

许多 *NIX 系统还具有pkill(1)killall(1)中的一个或两个,它们允许您按名称杀死进程。使用它们,您可以避免整个解析ps问题。

于 2013-10-02T14:04:17.810 回答
1

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

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

kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')
于 2016-06-08T12:21:44.343 回答
0

在某个地方遇到过..认为它简单而有用

可以直接在 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
于 2014-07-06T09:22:31.363 回答
0
#!/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

不确定这是否有帮助,但“kill”的拼写不正确。是大写的。

尝试“杀死”。

于 2014-08-18T20:00:14.580 回答
0
Kill -9 PID

应该

kill -9 $PID

看到不同?

于 2016-07-08T09:10:35.913 回答
-1

尝试以下脚本:

#!/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
于 2015-03-12T22:39:45.943 回答
-2
PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
**Kill -9 $PID**
fi
于 2013-10-02T13:35:42.103 回答