Linux 使用shell脚本自动终止进程

Linux 使用shell脚本自动终止进程,linux,shell,qnx,Linux,Shell,Qnx,我正在寻找可以找到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

我正在寻找可以找到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脚本?

试试以下方法:

kill -9 `pidof java`

killall java

或者更一般地说:

killall

有时,我的进程名称相同,但命令行参数不同。要终止此类进程或任意进程,而不必键入ps,然后终止pid,我执行以下操作:

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

在哪里

  • 是要在ps aux中搜索的任何短语 命令的输出
  • awk'{print$2}'
    将只过滤第二个 列,它是PID的列表
  • kill
    将在每个 那些家伙

编辑:正如tripleee所指出的,除非绝对需要,否则在进程上使用
kill-9
是个坏主意。因此,从上述命令中删除了
-9
部分

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


请参阅手册页面:

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

#!/bin/sh
ps | grep $1 | awk '{print $1}' | xargs kill -9
我把它放在/bin目录中(当然在chmod+x之后)


我发现
nikeairj
中提到的
pkill
/
pgrep
命令是最佳选择(如果可用)。 我还使用了以下命令,这些命令也可以在Linux/Unix操作系统中运行,而无需awk或其他可能不可用的命令(我记得在某些AIX或HP-UX环境中无法使用awk)


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

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

确保对pid搜索使用倒(``)逗号,如上所述

如果要从expect命令执行上述命令,则可以使用以下命令:

期望“$”

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

干杯,
Suraj

我用下面几行代码将Wifi置于监控模式后,用.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

grep'a'| awk'{b}'
反模式可以简化为
awk'a{b}'
。另请参阅另外建议不要使用
kill-9
,除非您真的、真的知道自己在做什么[cosmos@afisvr2:/data/cosmos/sim/bin]kill-9'pidof com.sds.afi.rte.cosmos-1.0.0.jar'-bash:kill:pidof com.sds.afi.rte.cosmos-1.0.0.jar:参数必须是进程或作业ids,它对我有效,但是我必须输入整个命令文本(与您在
ps
output中得到的完全相同)。以问题为例,应该是:
kill-9`pidof“java-Dlog4j.debug-Dlog4j.configuration=file:/data/cosmos/sim/bin/log4j.xml-jar com.sds.afi.rte.cosmos-1.0.0.jar”`
#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