一尘不染

用于在Linux上获取进程ID的Shell脚本

linux

我想编写一个Shell脚本(.sh文件)以获取给定的进程ID。我要在这里执行的操作是,一旦获得进程ID,就想杀死该进程。我正在Ubuntu(Linux)上运行。

我能够用这样的命令来做到这一点

ps -aux|grep ruby
kill -9 <pid>

但我不确定如何通过Shell脚本来实现。


阅读 546

收藏
2020-06-03

共1个答案

一尘不染

使用grep上的结果ps是在脚本一个坏主意,因为时间一定比例也将匹配你刚才援引的grep的过程。该命令pgrep避免了此问题,因此,如果您需要知道进程ID,那是一个更好的选择。(请注意,当然,可能有许多匹配的过程。)

但是,在您的示例中,您可以使用类似的命令pkill杀死所有匹配的进程:

pkill ruby

顺便说一句,您应该意识到,-9在几乎每种情况下,使用都是多余的(ho ho)-在“无用的套用kill -9信函” 文本中有一些有用的建议:

不不不。不要使用kill -9

它并没有给过程一个干净的机会:

  1. 关闭插座连接
  2. 清理临时文件
  3. 通知其孩子它要消失了
  4. 重置其终端特性

等等,依此类推。

通常,发送15,然后等待一两秒钟,如果不起作用,则发送2,如果不起作用,则发送1。如果不起作用,请删除二进制文件,因为程序的行为不当!

不要使用kill -9。不要带出联合收割机只是为了整理花盆。

2020-06-03