2

我正在寻找一个可以找到 PID 的命令,例如:

ps -ef | grep com.sds.afi.rte.cosmos-1.0.0.jar
cosmos    4690  4689  3 14:27 pts/8    00:00:06 java -Dlog4j.debug -Dlog4j.configuration=file:/data/cosmos/sim/bin/log4j.xml -jar com.sds.afi.rte.cosmos-1.0.0.jar
cosmos    5484  5482  0 14:30 pts/11   00:00:00 grep com.sds.afi.rte.cosmos-1.0.0.jar

然后使用以下命令杀死这些进程:

kill -9 pid

我怎样才能制作一个能自动完成上述所有工作的 shell 脚本?

4

7 回答 7

12

killall java

或更笼统地说:

killall <processname>

有时我的进程名称相同,但命令行参数不同。要杀死此类进程或任何任意进程而不必输入 ps 然后杀死 pid,我这样做:

ps aux | grep <something> | awk '{print $2}' | xargs kill

在哪里

  • <something>是您要在 ps aux 命令的输出中搜索的任何短语。
  • awk '{print $2}'将仅过滤掉第二列,即 PID 列表
  • kill将在每个 PID 上调用。

编辑:正如 Tripleee 指出的那样,kill -9除非绝对需要,否则猛烈抨击一个过程是一个坏主意。所以-9从上面的命令中删除了部分

于 2012-07-09T05:52:04.270 回答
3

我认为pkill -9 java是最简单的方法。pkill将使用 grep 查找匹配的进程名称。

请参阅手册页: http: //linux.die.net/man/1/pkill

于 2012-07-09T06:03:38.863 回答
1

尝试这个:

kill -9 `pidof java`
于 2012-07-09T05:45:18.733 回答
0

如果可用,我会找到最佳选择中提到的pkill/命令。pgrepnikeairj我还使用了以下内容,它们也可以在没有awk或其他可能不可用的命令awk的 Linux/Unix 操作系统中工作(我记得在某些AIXHP-UX环境 中无法使用)

# subsitute myMatch with your process cmdline match, e.g. "firefox", "firefox -P"
# or anything output by "ps -ef"
ps -ef|grep myMatch|grep -v grep|sed -e "s/^[^0-9]\+\([0-9]\+\)\s.\+$/\1/"|xargs kill "{}"
于 2014-02-05T12:57:30.520 回答
0

除了ErJab提供的解决方案之外,我还创建了一个 shell 脚本 killall 来模仿“killall”行为:

#!/bin/sh
ps | grep $1 | awk '{print $1}' | xargs kill -9

我放在 /bin 目录中(当然是在 chmod +x 之后)

于 2013-09-17T08:06:58.067 回答
0

在使用以下几行将其置于监视模式后,我制作了一个 .sh 以重新启动我的 Wifi。

#Display PID

echo "Killing network PID'S"

ps aux | grep wpa_supplicant | awk '{print $2}' | xargs kill



ps aux | grep NetworkManager | awk '{print $2}' | xargs kill

#Restart NetworkManager && wpa_supplicant

echo "Restarting NetworkManager && wpa_supplicant"

service NetworkManager restart && service wpa_supplicant restart
于 2016-06-08T16:59:33.373 回答
0

您可以在 shell 脚本中包含以下命令,该命令将终止“com.sds.afi.rte.cosmos-1.0.0.jar”的进程 ID

杀 -9ps aux | grep com.sds.afi.rte.cosmos-1.0.0.jar | grep -v grep | awk '{print \$2}'

确保您使用倒置 (``) 逗号进行 pid 搜索,如上所用。

如果您想从 expect 命令执行上述命令,那么您可以使用以下命令:

期待“$”

发送“杀死 -9 ps aux | grep com.sds.afi.rte.cosmos-1.0.0.jar | grep -v grep | awk '{print \$2}'\r”

干杯,苏拉杰

于 2016-02-22T12:33:38.643 回答