Linux 为什么可以';你能找到这个过程吗?
如果我执行以下命令,这只是一个长命令,将永远等待Linux 为什么可以';你能找到这个过程吗?,linux,bash,ps,grep,Linux,Bash,Ps,Grep,如果我执行以下命令,这只是一个长命令,将永远等待 grep 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abcd' 如果搜索长命令最后一段中包含的abcd,则pgrep-f找不到进程 ps auxww | grep abcd查找进程,但我无法在脚本中使用它,因为它还查找grep进程本身 如果只删除一个a,则pgrep-f abcd可以找到进程,但我有一个带有参数的很长的命令,因此我遇到了这个pg
grep 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abcd'
如果搜索长命令最后一段中包含的abcd
,则pgrep-f
找不到进程
ps auxww | grep abcd
查找进程,但我无法在脚本中使用它,因为它还查找grep
进程本身
如果只删除一个a
,则pgrep-f abcd
可以找到进程,但我有一个带有参数的很长的命令,因此我遇到了这个pgrep
限制
问题
根据唯一字符串检查此过程的正确方法是什么?您编辑的命令可通过以下任一命令找到:
pgrep -f abcd
甚至:
ps uxww | grep '[a]bcd'
让我试试
$ grep 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abcd'
现在在另一个终端窗口中:
$ pgrep grep
1842
找到它,或者至少找到一些grep
过程:
$ ps -f $(pgrep grep)
UID PID PPID C STIME TTY TIME CMD
501 1842 1836 0 8:59AM ttys004 0:00.00 grep aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abcd
是的,这就是我们发现的过程
让我们试试这个:
$ pgrep -f 'abcd'
1842
似乎对我有用。当数据发送到
mbuffer
进程时,它将在数据流结束时退出。那么您如何知道进程仍在运行?您是否检查了top
命令?顺便问一下,为什么对这个问题投反对票+1 long命令的目的是通过端口8023接收数据。在我的脚本中,我有这个长接收器命令和发送命令。即使发送命令退出,在接收命令退出之前仍可能需要一段时间,因此我要检查abcd
。如果我找到它,那么我将等待一秒钟,再次检查,只有当我在流程列表中没有看到abcd
时才继续。因此,即使是top
也没有在列表中显示此流程?pgrep
通常是您想要的解决方案。然而,有时更容易获得ps auxww
格式的结果,而不仅仅是PID(由pgrep返回)。使用ps auxww | grep[a]bcd
代替ps auxww | grep abcd
。我以为我在使用procps ng
,但我没有。这就是为什么它对我不起作用。我必须升级=)当第二个命令工作时,第一个命令不返回任何内容ps--version
是procps ng 3.3.10中的pgrep,请记住一个简单的测试不起作用。我的命令行参数是28699个字符。