MAB*_*ABC 4 process embedded fork multithreading
ps在我的 Linux 系统中执行命令时,我看到一些用户进程两次(不同的 PID...)。我想知道它们是新进程还是同一进程的线程。我知道标准 C 库中的一些函数可以创建一个新进程,例如fork(). 我想知道当我执行ps命令时,哪些具体函数可以使进程出现两次,因为我正在查看创建新进程或线程的源代码。
小智 5
有点混乱。fork是一个系统调用,它通过复制父进程的映像来创建一个新进程。之后如果子进程想要成为另一个程序,它会调用一些exec家族系统调用,例如execl. 例如,如果您想ls在 shell 中运行,shell 会派生新的子进程,然后调用execl("/bin/ls").
如果您看到两个程序并且它们的pid's 不同,请检查它们的ppid's(父 ID)。例如,如果p1isppid的进程pid是 is p2,则表示其 id 是p1fork 该进程的进程。但是如果第一个进程'ppid与另一个进程'不同pid,则意味着相同的命令被执行了两次。
如果pid和ppid相同,但是tid's (thread id's) 不同,则意味着它是一个具有 2 个线程的进程。
我认为制作自己的外壳是一个很好的起点。