pgrep程序用linux中的连字符?

时间:2015-12-22 01:57:43

标签: grep

如何pgrep程序包含连字符?考虑像波纹管这样的情况。

c源文件名program-contains-hypen.c

#include <stdio.h>
int main(int argc, char *argv[])
{
    getchar();
    return 0;
}

然后继续使用vim进行编辑,并在另一个终端中运行已编译的program-contains-hypen

此时,如果我使用pgrep program-contains-hypen,则没有任何结果;如果我使用pgrep -f program-contains-hypen,则会得到两个结果。

如何准确获取程序program-contains-hypen的pid?

PS:

$ pgrep --version
pgrep from procps-ng 3.3.10

更新

这不是连字符的问题,而是命令行的长度。

请参阅https://askubuntu.com/questions/361104/pgrep-pattern-length-limit

感谢@ user5631389

1 个答案:

答案 0 :(得分:2)

我想你已回答了自己的问题。 pgrep -f是执行此操作的正确方法。如果您获得两个结果,则有两个具有该名称的正在运行的进程。您可以使用pgrep -fa查看整个命令行。例如:

如果没有-f,您只能根据https://askubuntu.com/questions/361104/pgrep-pattern-length-limit使用一定数量的字符。例如:

$ pgrep unity-scope-loader 
$ pgrep unity-scope-loade
$ pgrep unity-scope-load
$ pgrep unity-scope-loa
9489
$ pgrep -f unity-scope-loader 
9489
$ pgrep -fa unity-scope-loader
9489 /usr/bin/unity-scope-loader applications/applications.scope applications/scopes.scope commands.scope
$ awk '$11~/unity-scope-loader/{print $2}' <(ps aux)
9489