我很难理解使用pgrep
与使用ps | grep
之间的区别。
除了pgrep
只列出PID之外,还有什么区别?
当我在终端的后台运行kwrite实例,以及使用GUI打开一个实例时,为什么ps | grep kwrite
给出的输出只有一个PID,当两个kwrite实例正在运行时?
稍微不同的是,为什么使用pkill
来杀死崩溃的kwrite实例不是杀死进程的好方法?我能提出的唯一解释是,它会用字符串" kwrite"来杀死所有进程。在他们中间,这可能不仅仅是我想要杀死的kwrite的实例。
感谢您的帮助。
答案 0 :(得分:1)
ps | grep
将分叉2个进程,pgrep
只有一个。
ps | grep whatever
也可能会列出grep whatever
,具体取决于ps
退出,pgrep whatever
不会。
ps
需要额外的命令行开关来显示两个kwrite进程。 (参见:man ps并在下次尝试ps -ef)
默认情况下,ps选择与当前用户具有相同有效用户ID(euid = EUID)且与调用者相同的终端关联的所有进程。
尝试运行一个完整的kwrite实例,最好使用重要和未保存的数据来查找,为什么使用pkill
查杀崩溃的实例可能不是最聪明的想法。