我经常需要在编程期间杀死进程 .
我现在这样做的方式是:
[~]$ ps aux | grep 'python csp_build.py'
user 5124 1.0 0.3 214588 13852 pts/4 Sl+ 11:19 0:00 python csp_build.py
user 5373 0.0 0.0 8096 960 pts/6 S+ 11:20 0:00 grep python csp_build.py
[~]$ kill 5124
如何自动提取进程ID并在同一行中终止它?
像这样:
[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
22 回答
尝试使用
我的任务是杀死与特定目录中的regexp匹配的所有内容(在selenium测试之后并非一切都停止) . 这对我有用:
我开始使用这样的东西:
您可以仅使用
pkill '^python*'
进行正则表达式进程查杀 .如果你想在杀死之前看到你要杀死或找到的东西,只需使用
pgrep -l '^python*'
,其中-l输出也是进程的名称 . 如果您不想使用pkill
,请使用:pgrep '^python*' | xargs kill
使用pgrep - 在许多平台上都可用:
pgrep -f将返回所有PID重合“cps_build”
一个班轮:
打印第2栏:
awk '{print $2}'
sudo 是可选的
运行
kill -9 5124
,kill -9 5373
等(kill -15更优雅但稍慢)奖金:
我还有.bash_profile中定义的2个快捷方式函数(〜/ .bash_profile用于osx,你必须看看哪些适用于你的* nix机器) .
p 关键字
列出了包含关键字的所有 P rocesses
用法例如:
p csp_build
,p python
等bash_profile代码:
ka 关键字
K ills A ll具有此关键字的进程
用法例如:
ka csp_build
,ka python
等可选杀戮等级,例如:
ka csp_build 15
,ka python 9
bash_profile代码:
如果你有pkill,
如果您只想对进程名称(而不是完整的参数列表)进行grep,请不要使用
-f
.你可以用awk和backtics做到这一点
awk中的$ 2打印第2列,而backtics运行打印的语句 .
但更简洁的解决方案是让python进程在/ var / run中存储它的进程id,然后你就可以简单地读取该文件并将其删除 .
我使用
gkill processname
,其中gkill是以下脚本:注意:它不会杀死在命令行中具有“grep”的进程 .
在某些情况下,我喜欢像这样同时杀死进程:
但是,我认为在你的情况下这有点不合适 . (可能在后台运行python a,python b,python x ...)
您可以使用以下命令列出命令的pid . 使用top或更好的使用htop来查看linux中的所有进程 . 在这里,我想杀死一个名为的进程
并验证pid . 它必须是正确的 . 要杀死它们使用kill命令 .
例如: - 来自htop进程列表 .
这解决了我的问题 . 如果您不小心杀死进程,请始终准备好重新启动进程 .
ps不需要用户开关 .
要按关键字
midori
终止进程,例如:kill -SIGTERM $(pgrep -i midori)
在
bash
中,您应该能够:有关其运作的详情如下:
ps
为您提供了所有进程的列表 .基于搜索字符串的
grep
过滤器[p]
是阻止您自己获取实际grep
进程的技巧 .awk
只给出了每一行的第二个字段,即PID .$(x)
构造意味着执行x
然后获取其输出并将其放在命令行上 . 上面构造中的ps
管道的输出是进程ID列表,因此您最终会得到像kill 1234 1122 7654
这样的命令 .这是一个显示它在行动的成绩单:
你可以看到它终结了所有的睡眠者 .
更详细地解释
grep '[p]ython csp_build.py'
位:当你执行
sleep 3600 &
后跟ps -ef | grep sleep
时,你往往会得到两个带有sleep
的进程,sleep 3600
和grep sleep
(因为它们都有sleep
,这不是火箭科学) .但是,
ps -ef | grep '[s]leep'
不会创建一个包含sleep
的进程,而是创建grep '[s]leep'
,这里是棘手的位:grep
不会查找正则表达式“字符类[s]
中的任何字符(即s
),然后是leep
.换句话说,它正在寻找
sleep
但是grep进程是grep '[s]leep'
,其中没有sleep
.当我看到这个(由某人在这里)时,我立即开始使用它,因为
比添加
| grep -v grep
少一个过程;和优雅而偷偷摸摸,罕见的组合:-)
杀死我们自己的进程从一个常见的 PPID 开始是非常频繁的 pkill 关联到
–P
标志是我的赢家 . 使用@ ghostdog74示例:把-f给pkill
.py文件的确切路径是
将进程名称模式解释为扩展常规表达 .
我用这个来杀死Firefox,当它被脚本抨击和cpu抨击:)用您想要死的应用程序替换'Firefox' . 我在Bash shell上 - OS X 10.9.3 Darwin .
kill -Hup $(ps ux | grep Firefox | awk 'NR == 1 {next} {print $2}' | uniq | sort)
仅使用
awk
(和ps
)的方法:通过使用字符串相等测试我防止匹配此过程本身 .
在bash中查找并删除一行中的所有进程 .
ps -ef | grep '<exe_name>'
- 提供与模式匹配的正在运行的进程详细信息(uname,pid等)列表 . 输出列表包括此grep
命令,它也会搜索它 . 现在要杀死我们需要忽略这个grep
命令进程 .ps -ef | grep '<exec_name>' | grep -v 'grep'
- 使用-v 'grep'
添加另一个grep将删除当前的grep进程 .然后使用
awk
单独获取进程ID .然后将此命令保存在
$(...)
中并将其传递给kill
命令,以终止所有进程 .以下命令将派上用场:
kill $(ps -elf | grep <process_regex>| awk {'print $4'})
例如 . ,
ps -elf | grep top
kill -$(ps -elf | grep top| awk {'print $4'})
如果进程仍然卡住,请使用“-9”扩展名进行hardkill,如下所示:
kill -9 $(ps -elf | grep top| awk {'print $4'})
希望有帮助......!