我需要使用fork创建进程,并根据它们的名称/标签为它们分配相应的值。然后使用C语言中的pipes()传输值。我的问题是,有没有办法命名流程?
答案 0 :(得分:0)
每个流程都有一个唯一的标识符,PID。在Linux(以及所有POSIXy和Unix系统)中,这些标识符是正整数,其中1是特殊的,init。
(通过唯一,上面,我的意思是每个活动(运行)进程和僵尸进程都有自己的PID,并且没有两个共享相同的PID。但是,旧的PID最终会被重用,有时候在几秒钟内;它取决于系统。不要指望死进程的PID保持未使用!)
当您分叉子进程时,fork()
会在子进程中返回(pid_t)0
,并在父进程中返回子进程PID。通过存储您在数组中创建的子进程的PID,父进程可以告诉哪个子进程是哪个。
每个流程始终可以调用getpid()
来查找自己的PID。
进程还可以调用getppid()
来查找其父进程的PID(调用fork()
创建此进程的进程的PID)。但是,如果真正的父亲已经死亡/退出,getppid()
将返回1.(这也是我们有一个init进程的原因的一半.init进程只负责两件事:作为孤儿的父母进程,并在它们死亡时收获它们;并在操作系统启动时启动所有其他进程。)
getpid()
或getppid()
都不会失败;您可以依赖它们始终返回相应的PID。
总的来说,这种设计在实践中非常普遍。使用多个进程来完成工作的所有守护进程基本上都是这样做的。这意味着这项练习在实践中也很重要。