ls -l /proc/self | ls -l /proc/self |增量PID?

ls -l /proc/self | ls -l /proc/self |增量PID?

每次ls -l /proc/self执行该命令时,链接指向的进程的PID不断增加。为什么会这样呢?是命令的PID吗ls

答案1

是的,它的 PID 是ls

/进程/自身 该目录指访问/proc文件系统的进程,与同一进程的进程ID命名的/proc目录相同。

(从man 5 proc

/proc/self/proc/PID是通过文件系统的魔力访问该链接的进程 PID 的符号链接proc

在你的例子中,该进程是ls,因此每次运行该命令时,你都会得到一个不同的 PID(它往往会增加)。

答案2

是的,这就是 PIDLS

POSIX 定义ls为外部命令,因此无论何时运行ls,shell 都必须创建新进程并ls在该进程中运行。

为此,shell 将调用执行()系统调用:

$ strace ls -l /proc/self
execve("/bin/ls", ["ls", "-l", "/proc/self"], [/* 76 vars */]) = 0

可以看到,新进程创建后,/proc/self属于该进程的上下文,所以它的PID被扩展为ls.

相关内容