pgrep 模式长度限制

mon*_*zie 9 process grep

如果模式长度超过 15 个字符,则 pgrep 不返回任何内容。我在手册页中找不到关于最大模式长度的任何内容。

这是一个错误吗?

为了说明的目的,我创建了一个名为 12345678901234567890 的过程

$ pgrep 12345678901234
5367
$ pgrep 123456789012345
5367
$ pgrep 1234567890123456
$ 
Run Code Online (Sandbox Code Playgroud)

phu*_*clv 6

根据pgrep手册页(强调我的):

笔记

用于匹配的进程名被限制为存在于的输出15个字符/proc/pid/stat。使用该-f选项匹配完整的命令行/proc/pid/cmdline.

原因是进程名称限制为 16 个字节,包括 NULL 终止字节。从prctl手册页

PR_SET_NAME(从 Linux 2.6.9 开始)

使用 指向的位置中的值设置调用线程的名称(char *) arg2名称最长可达 16 个字节,包括终止空字节。(如果字符串的长度(包括终止空字节)超过 16 个字节,则该字符串将被静默截断。)

请参阅进程名称长度的最大允许限制是多少?


ste*_*ver 4

我认为这不是对模式长度本身的限制,而是对 /proc/[pid]/stat 文件中的commpgrep (命令)字段的长度的限制(这是信息的来源)。ps

根据man proc, /proc/[pid]/stat 的定义来自 /usr/src/linux/fs/proc/array.c 因此您需要在那里寻找明确的答案。