您好我有这样的问题
pid_t pid1;
pid_t pid2;
void switch_files(int sig_type)
{
printf("%d %d\n", pid1, pid2);
}
int main(int argc, char **argv)
{
pid_t lpid1,lpid2;
if ((lpid1 = fork()) == 0)
{
signal(SIGUSR1, switch_files);
//Some work
} else {
pid1 = lpid1;
}
if ((lpid2 = fork()) == 0)
{
signal(SIGUSR2, switch_files);
//Some work
} else {
pid2 = lpid2;
}
while(scanf("%s", input) > 0)
{
write(pipe1[1], input, strlen(input) + 1);
kill(pid1, SIGUSR1);
}
waitpid(pid1, 0, 0);
waitpid(pid2, 0, 0);
}
所以我需要在我的回调信号中有pid1
和pid2
的值,而在printf我有0 0
,但在main中我有正常的pids值。我如何解决这个问题,谢谢你的帮助。
答案 0 :(得分:2)
如果您希望孩子拥有pid,只需要求:
if ((lpid1 = fork()) == 0)
{
pid1 = getpid();
pid2 = -1; // other child doesn't even exist yet
signal(SIGUSR1, switch_files);
//Some work
exit(0); // you don't want the child to go executing parent code, do you?
}
和
if ((lpid2 = fork()) == 0)
{
//pid1 already set with pid of 1st child
pid2 = getpid();
signal(SIGUSR2, switch_files);
//Some work
exit(0); // you don't want the child to go executing parent code, do you?
}
如果你需要第一个孩子拥有第二个孩子的pid,那么你需要使用some form of IPC,这样你就可以在第二个孩子开始并且它的pid是已知的。
答案 1 :(得分:0)
如果您希望孩子们获得信息,您必须以某种方式向他们传达这些信息。您可以使用文件,管道,共享内存或任何所需的机制。但你必须以某种方式传递信息。