在Unix系统上创建子进程?

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)

Jul*_*ano 6

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)以刷新标准输出.