BASH命令:pkill / pgrep

时间:2014-12-23 00:13:46

标签: bash shell command

我很难理解使用pgrep与使用ps | grep之间的区别。
除了pgrep只列出PID之外,还有什么区别?

当我在终端的后台运行kwrite实例,以及使用GUI打开一个实例时,为什么ps | grep kwrite给出的输出只有一个PID,当两个kwrite实例正在运行时?

稍微不同的是,为什么使用pkill来杀死崩溃的kwrite实例不是杀死进程的好方法?我能提出的唯一解释是,它会用字符串" kwrite"来杀死所有进程。在他们中间,这可能不仅仅是我想要杀死的kwrite的实例。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  1. ps | grep将分叉2个进程,pgrep只有一个。

  2. ps | grep whatever也可能会列出grep whatever,具体取决于ps退出,pgrep whatever不会。

  3. ps需要额外的命令行开关来显示两个kwrite进程。 (参见:man ps并在下次尝试ps -ef)

  4.   

    默认情况下,ps选择与当前用户具有相同有效用户ID(euid = EUID)且与调用者相同的终端关联的所有进程。

    尝试运行一个完整的kwrite实例,最好使用重要和未保存的数据来查找,为什么使用pkill查杀崩溃的实例可能不是最聪明的想法。