笔记

笔记

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

这是一个错误吗?

为了便于说明,我创建了一个名为 12345678901234567890 的进程

$ pgrep 12345678901234
5367
$ pgrep 123456789012345
5367
$ pgrep 1234567890123456
$ 

答案1

根据pgrep手册页(重点是我的):

笔记

用于匹配的进程名称仅限于输出中有 15 个字符/proc/pid/stat. 使用-f选项来匹配完整的命令行,/proc/pid/cmdline

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

PR_SET_NAME(自 Linux 2.6.9 起)

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

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

答案2

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

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

相关内容