父进程获取子进程pid的问题(linux c程序)
if(fork()==0)
{
....
if(fork()==0)
{}
}
else
{
//父进程获取子进程的pid
//我是想这样写
pid_t pid1=wait(0);//这是获取第一个子进程pid
pid_t pid2=wait(0);//我本想这是第二个子进程pid,可是结果是-1,我想了下应该第二个子进程是第一个子进程的子进程,所以这样不行
//我的问题就是,父进程怎么样能你获得到第二个子进程的pid呢?
}
谢谢了
------解决方案--------------------那就在把第二次fork安排在父进程里嘛
pid_t pid1, pid2
pid1 = fork();
if (pid1 > 0)
{
pid2 = fork();
}
------解决方案--------------------ls+1
还有就是你写的这个程序,就相当于一个父进程,里面fork()产生一个子进程;lz底子很薄,多看书吧
------解决方案--------------------fork()成功返回的就是新建子进程的id,楼主弄俩变量接收即可
------解决方案--------------------#include<unistd.h>
pid_t f1,s1,s2;
int main()
{
f1=getpid();//父
s1=fork();//子1
s2=fork();//子2
printf("%d\n%d\n%d\n",f1,s1,s2);
return 0;
}
------解决方案--------------------
如果楼主是想要表达这个意思的话,那么就需要用到进程间通信,因为子子1与父进程并不具有直接关系。
我这里采用了共享内存的方式,程序如下:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/shm.h>
#include <stdlib.h>
int main(void)
{
int shmid = 0;
int *shmbuf = NULL;
if((shmid = shmget(777, sizeof(int), 0666
------解决方案--------------------
IPC_CREAT)) < 0) {
perror("shmget");
exit(-1);
}
if((shmbuf = shmat(shmid, NULL, 0)) < 0) {
perror("shmat");
exit(-1);
}
if(0 == fork()) {
if(0 == fork()) {
printf("I'm the child of child1. my pid = %d, pid_father = %d\n", getpid(), getppid());
*shmbuf = getpid();
} else {