【发布时间】:2020-06-23 11:00:17
【问题描述】:
我有一个如下所示的代码段:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
pid_t first, last;
last = fork();
if (last == 0) {
char *args[] = { "./last", NULL };
char *env[] = { NULL };
execve("./last", args, env);
_exit(1);
} else if (last == -1) {
fprintf(stderr, "Error: failed to fork last.\n");
exit(1);
}
first = fork();
if (first == -1) {
fprintf(stderr, "Error: failed to fork first.\n");
exit(1);
} else if (first > 0) {
int status;
waitpid(first, &status, 0);
} else {
char *args[] = { "./first", NULL };
char *env[] = { NULL };
execve("./first", args, env);
_exit(1);
}
return 0;
}
从某种意义上说,这很好用,我可以看到正在调用和运行的进程。但是,我的问题是进程last 有一个无限循环,当进程first 终止时,它仍然保持运行。有没有办法在 C 中强制进程 last 在进程 first 完成时终止?
【问题讨论】:
-
你不能用kill吗? man7.org/linux/man-pages/man2/kill.2.html