Linux 使用shell脚本自动终止进程
我正在寻找可以找到PID的命令,例如: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
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中搜索的任何短语 命令的输出李>
将只过滤第二个 列,它是PID的列表awk'{print$2}'
将在每个 那些家伙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-9ps 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