我正在寻找一个可以找到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脚本?
答案 0 :(得分:9)
killall java
或者更一般地说:
killall <processname>
有时我的进程名称相同,但命令行参数不同。要杀死这些进程或任何进程而不必键入ps然后杀死pid,我这样做:
ps aux | grep <something> | awk '{print $2}' | xargs kill
,其中
<something>
是您要在ps aux中搜索的任何短语
命令的输出。 awk '{print $2}'
只过滤掉第二个
列,这是一个PID列表kill
那些PID。编辑:正如三人指出的那样,除非绝对需要,否则在进程上抨击kill -9
是个坏主意。因此从上面的命令中删除了-9
部分
答案 1 :(得分:2)
我认为pkill -9 java
是最简单的方法。 pkill
将使用grep查找匹配的进程名称。
答案 2 :(得分:1)
试试这个:
kill -9 `pidof java`
答案 3 :(得分:0)
除了提供的解决方案ErJab之外,我创建了一个shell脚本killall来模仿'killall'行为:
#!/bin/sh
ps | grep $1 | awk '{print $1}' | xargs kill -9
我放在/ bin目录中(当然是在chmod + x之后)
答案 4 :(得分:0)
我发现pkill
提到的 pgrep
/ nikeairj
命令是可行的最佳选择。
我还使用了以下内容,它们也适用于Linux / Unix操作系统没有awk
或其他可能不可用的命令(我记得在某些中无法使用awk
AIX
或 HP-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 "{}"
答案 5 :(得分:0)
您可以在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”
干杯, 苏拉杰
答案 6 :(得分:0)
我使用以下几行将其设置为监控模式后,重新启动了我的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