C:父子进程
问题描述:
我试图执行下列操作...C:父子进程
Create a new process
obtain the PID of a process
put a process to sleep for a defined period of time
check process ID on the terminal
我的程序运行,但输出是不是我希望它是和我不是很确定我要出错的地方。感谢您的时间,我真的很感激!
代码:
int main() {
int i;
pid_t pid=0;
/** use fork() system call to create a new process */
/** if the pid returned by fork() is negative, it indicates an error */
if(fork()<0) {
perror("fork");
exit(1);
}
if(pid==0) {
printf("child PID= %d\n", (int) getpid());
for(i=0; i<10; i++) {
printf("child: %d\n", i);
/** put process to sleep for 1 sec */
sleep(1);
}
} else {
/* parent */
/** print the parent PID */
printf("parent PID= %d\n", (int) getpid());
for(i=0; i<10; i++) {
printf("parent: %d\n", i);
sleep(1);
}
}
exit(0);
}
输出应该是这个样子......
parent PID=8900
child PID=4320
parent:0
child:0
child:1
parent:1
child:2
parent:2
child:3
parent:3
parent:4
etc.
,但我发现......
child PID= 97704
child: 0
child PID= 106388
child: 0
child: 1
child: 1
child: 2
child: 2
child: 3
child: 3
child: 4
child: 4
child: 5
child: 5
child: 6
child: 6
child: 7
child: 7
答
如上所述,您不会将pid
分配给任何东西,因此它始终为零。您还应该将您的条件更改为pid
,而不是再拨打另一个fork()
。
int main() {
int i;
pid_t pid=0;
pid = fork(); /* Add this */
/** use fork() system call to create a new process */
/** if the pid returned by fork() is negative, it indicates an error */
if(pid<0) { /* Change this */
perror("fork");
exit(1);
}
此外,不要惊讶,如果您的预期输出仍然看起来不同于你的期望。没有办法告诉孩子或父母什么时候会被打电话(特别是如果你睡了)。这取决于各种各样的事情。
编辑:我明白你在说什么。你想通过终端检查进程ID吗?您可以将getchar();
添加到程序的最后,以暂停程序退出,然后您可以打开另一个终端并运行ps
。你需要确保你添加了#include <stdio.h>
,尽管如此。
答
你不确实将fork()的输出分配给pid,所以pid保持为零。
答
使用pid
进行比较而不是调用另一个fork()
。设置pid
等于fork()
,所以你可以比较它来检查pid
中的错误。
int main() {
int i;
pid_t pid=0;
pid = fork();
/** use fork() system call to create a new process */
/** if the pid returned by fork() is negative, it indicates an error */
if(pid<0) {
perror("fork");
exit(1);
}
if(pid==0) {
printf("child PID= %d\n", (int) getpid());
for(i=0; i<10; i++) {
printf("child: %d\n", i);
/** put process to sleep for 1 sec */
sleep(1);
}
} else {
/* parent */
/** print the parent PID */
printf("parent PID= %d\n", (int) getpid());
for(i=0; i<10; i++) {
printf("parent: %d\n", i);
sleep(1);
}
}
exit(0);
}
+0
请看看这个页面https:// *.com/help并尝试重新构思您的问题,以便其他人可以更好地帮助您。 – mattmilten
'如果(fork()的'如果((PID =叉()) user3386109