如何将数据从父进程发送到子进程和信号

时间:2019-06-06 16:34:47

标签: c linux pipe

我有两个并行运行的进程。我希望父母将一些字符发送给孩子。我想使用pipe()并从父级写入并将信号发送给子级,然后从子级检查信号是否已发送并在子级进程中读取char。我该怎么办?

int run() {
    pid_t pid;
    int filds[2];
    pipe(filds);
    char *args[150] = {"./draw.out", NULL}; // child will run executable.
    char buff = '\0';

    if ((pid = fork()) < 0) {  // fork a child process/
        printf("*** ERROR: forking child process failed\n");
        exit(1);
    } else if (pid == 0) {
        execvp(args[0], args); // run program from the child process.
    } else {  // for the parent
            char btnPressed = getch();

            while (btnPressed != 'q'){
            btnPressed = getch(); // gets the char
            write(filds[1],buff, BUFF_SIZE); //write to the pipe.
            // how do i send safe signal to child?
        }

    }
}

1 个答案:

答案 0 :(得分:0)

首先,您不能同时使用execvp和管道。由于execvp将子进程替换为另一个可执行文件。这意味着父进程和子进程不再共享管道,因为execvp创建的新进程具有不同的堆栈。

您可以在共享内存上传递数据,并向孩子发送信号。孩子读取数据后,它还可以发送信号以表明我已收到数据。