0 c unix parent-child child-process
我正在尝试在另一个进程中创建子进程.我用C语言编写这两个程序.首先,我编写一个虚拟进程,它将是子进程.它所做的只是在屏幕上写一个字符串.它本身很好用.然后我写另一个程序,它将是父进程.但是,我无法实现.我正在尝试将fork和execl函数一起使用,但是我失败了.我还希望子进程在父进程终止之前不会终止.
我该如何编写父进程?
谢谢.
以下是子进程的代码:
#include <stdio.h>
int main(void) {
while(1) {
printf("*");
sleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
这是父进程:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
if (fork()) {
while(1) {
printf("-\n");
sleep(5);
}
} else {
execl("./", "dummy", (char *)0);
}
}
Run Code Online (Sandbox Code Playgroud)
fork()系统调用可能会返回三种不同的状态:失败(<0),父进程(> 0)或子进程(== 0).您必须正确测试返回值.
int pid = fork();
if (pid < 0) {
/* handle error */
perror("fork");
exit(1);
} else if (pid > 0) {
/* parent code */
} else {
/* child code */
}
Run Code Online (Sandbox Code Playgroud)
你的execl()系统调用是错误的.第一个参数是你想要执行的程序的路径,"./"无效,它至少应该是"./dummy".下一个参数是按照惯例命令名称(执行程序中的argv [0]),它可能是第一个参数的重复.所以:
execl("./dummy", "dummy", NULL);
Run Code Online (Sandbox Code Playgroud)
另请注意,printf("*")子程序中的语句可能会缓冲,并且您不会在终端上看到任何内容.您必须在末尾添加"\n"或调用fflush(stdout)以刷新标准输出.
| 归档时间: |
|
| 查看次数: |
4276 次 |
| 最近记录: |