假设一个人执行
而[true];回声“你好”;完成;直接在shell上。
我如何找到相同的过程并在之后杀死它?
答案 0 :(得分:1)
取决于你想要的hacky,以及你愿意打破多少。
例如,如果你在Bash中运行它,并尝试在例如ps wafux
中查找该过程,那么就不会有任何子进程由任何这些命令启动因为它们都是内置函数(有关详细信息,请参阅man bash
)。从同一个shell外部杀死它的唯一方法是杀死shell本身,例如killall bash
。这不是很好,但至少应该在某些* nixes的“正常”情况下完成结果。
如果这是您在shell中开始的最后一个后台过程,则可以使用kill $!
在同一个shell 中将其杀死。如果您在启动它之后尚未启动任何其他bash
进程,则可以从其他shell运行pkill --newest bash
。
Process Management是一篇很有意思的相关文章,它突出了一些令人难以置信的丑陋黑客,它们太常见且危险。整个网站非常值得一读。
答案 1 :(得分:1)
对你的问题不是一个真正的答案,但在评论中表达过于繁琐。
我用来检测这些永无止境的脚本的方式我最终使用
创建了一个bash的符号链接ln -s /bin/bash ~/bin/mybash
然后使用~/bin/mybash
运行您的脚本。类似的东西:
~/bin/mybash -c 'while [ true ]; do echo "hello"; done;'
然后,您可以按mybash
而非bash
搜索流程列表。