可执行文件名为linux,可以以各种方式读取。
还有其他方法,如读取/proc//stat或/proc//status,但它们类似于1。
对于第1点,proc(5)手册页说:
括号中可执行文件的文件名。长度大于TASK_COMM_LEN (16)字符(包括终止空字节)的字符串将被静默截断。无论可执行文件是否被交换,这都是可见的。
我看到三个进程不匹配,并突出显示它们(现在在我的系统上):
考虑以下情况:
/proc/7610/comm的含量为Web Content。/proc/7610/cmdline的含量为/opt/firefox-developer-edition/firefox-bin-contentproc-childID17-isForBrowser-prefsLen7837-prefMapSize238232-parentBuildID20201215185920-appdir/opt/firefox-developer-edition/browser4080truetab。/proc/38193/comm的含量为zyxwvutsrqponml。/proc/38193/cmdline的含量为/ramdisk/abcdefghijklmnopqrstuvwxyz./zyxwvutsrqponmlkjihgfedcba。在ramdisk/abcdefghijklmnopqrstuvwxyz和./zyxwvutsrqponmlkjihgfedcba之间有一个D46和D47,我可以编程地看到它,我用\s替换它。
/proc/37030/comm的含量为kworker/3:1-xfs-reclaim/sda2。/proc/37030/cmdline的内容是空的。文件通信如何包含“kworker/3:1-xfs-reclaim/sda2 2”而不被截断为15位(+ \n为16位)?
我怎么知道它是否真的被截断了,就像第2点的情况一样?
发布于 2021-01-19 13:16:47
唯一可靠的方法是通过/proc/PID/exe,即使可执行文件已经被删除,或者它从一开始就不存在(比如在通过fexecve()或execveat(AT_EMPTY_PATH)执行用memfd_create()创建的文件时)。
进程本身可以很容易地伪造/proc/PID/comm和/proc/PID/cmdline (前者通过prctl(PR_SET_NAME),后者仅通过覆盖argv[]字符串)。
文件
comm如何包含kworker/3:1-xfs-reclaim/sda2而不被截断为15位(+\n为16)?
这是一个内核线程,而不是用户进程,不同的规则应用;-)
https://unix.stackexchange.com/questions/629869
复制相似问题