C:父子进程
C: Parent and Child Processes
我正在尝试执行以下操作...
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
您并没有真正将 fork() 的输出分配给 pid,因此 pid 保持为零。
如上所述,您没有将 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);
}
此外,如果您的预期输出看起来仍然与您预期的不同,请不要感到惊讶。无法判断 child 或 parent 何时会被调用(尤其是当您取消睡眠时)。这取决于多种因素。
编辑:我明白你在说什么。您想通过终端检查进程 ID 吗?您可以在程序末尾添加 getchar();
以暂停程序退出,然后您可以打开另一个终端并 运行 ps
。不过,您需要确保添加 #include <stdio.h>
才能使用它。
使用 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);
}
我正在尝试执行以下操作...
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
您并没有真正将 fork() 的输出分配给 pid,因此 pid 保持为零。
如上所述,您没有将 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);
}
此外,如果您的预期输出看起来仍然与您预期的不同,请不要感到惊讶。无法判断 child 或 parent 何时会被调用(尤其是当您取消睡眠时)。这取决于多种因素。
编辑:我明白你在说什么。您想通过终端检查进程 ID 吗?您可以在程序末尾添加 getchar();
以暂停程序退出,然后您可以打开另一个终端并 运行 ps
。不过,您需要确保添加 #include <stdio.h>
才能使用它。
使用 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);
}