我很少有进程使用相同的名称运行,但命令行参数不同。

$ ps -ef | grep process_name
myusername 19276 6408 0 18:12 pts/22 00.00.00 process_name 4010 127.0.0.1
myusername 23242 6369 0 18:32 pts/11 00.00.00 process_name 4010 127.0.0.2

如何根据进程的全名获取进程id,例如process_name 4010 127.0.0.1
我试过使用pgrep,但看起来这不考虑参数。
$ pid=$(pgrep process_name)
19276 23242
$ pid=$(pgrep process_name 4010 127.0.0.1) #error
$ pid=$(pgrep "process_name 4010 127.0.0.1") #blank
$ pid=$(pgrep "process_name\s4010\s127.0.0.1") #blank
$ pid=$(pgrep "process_name[[:space:]]4010[[:space:]]127.0.0.1") #blank

最佳答案

使用-f选项匹配完整的命令行:

pgrep -f 'process_name 4010 127.0.0.1'

这也将匹配subprocess_name 4010 127.0.0.11。如果要避免这种情况,请使用^在开始时锚定匹配,并使用$在结束时锚定匹配:
pgrep -f '^process_name 4010 127.0.0.1$'

文档
man pgrep
-f,--full模式通常只与进程匹配
名字。设置-f时,将使用完整的命令行。

09-13 04:24