Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 父子进程通信_C_Linux_Fork - Fatal编程技术网

C 父子进程通信

C 父子进程通信,c,linux,fork,C,Linux,Fork,我在一个C程序中,使用fork()系统调用来创建一个子进程。如何从child->parent传输值?是否可以在父进程中的某个位置检索子进程的退出代码。。谢谢您可能对wait()和waitpid()感兴趣,请参阅 下面是一个使用waitpid()的非阻塞示例: 注意,我没有测试上面的代码 对于一般的异步进程间通信,您可以使用管道(pipe()、套接字、共享内存或-当心-文件。您可能对wait()和waitpid()感兴趣,请参阅 下面是一个使用waitpid()的非阻塞示例: 注意,我没有测试上面

我在一个C程序中,使用fork()系统调用来创建一个子进程。如何从child->parent传输值?是否可以在父进程中的某个位置检索子进程的退出代码。。谢谢

您可能对wait()和waitpid()感兴趣,请参阅

下面是一个使用waitpid()的非阻塞示例:

注意,我没有测试上面的代码


对于一般的异步进程间通信,您可以使用管道(pipe()、套接字、共享内存或-当心-文件。

您可能对wait()和waitpid()感兴趣,请参阅

下面是一个使用waitpid()的非阻塞示例:

注意,我没有测试上面的代码

对于一般的异步进程间通信,您可以使用管道(pipe()、套接字、共享内存或-当心-文件。

在父进程中使用
waitpid(pid)

pid_t waitpid(pid_t pid, int *status, int options);
描述

waitpid函数暂停当前进程的执行,直到pid参数指定的子进程退出,或者直到传递了一个信号,其操作是终止当前进程或调用信号处理函数。如果pid请求的子进程在调用时已经退出(所谓的“僵尸”进程),则函数将立即返回。子系统使用的所有系统资源都将被释放

在父进程中使用
waitpid(pid)

pid_t waitpid(pid_t pid, int *status, int options);
描述

waitpid函数暂停当前进程的执行,直到pid参数指定的子进程退出,或者直到传递了一个信号,其操作是终止当前进程或调用信号处理函数。如果pid请求的子进程在调用时已经退出(所谓的“僵尸”进程),则函数将立即返回。子系统使用的所有系统资源都将被释放


使用waitpid和选项WNOHANG,您可以(在循环中)测试子项是否已退出,如果已退出,则检索退出代码。如何检索子项的退出代码?如果我理解为0,那么如果我想在子项的退出代码中从子项向父项传输一个值,该怎么办?@shaku:成功调用waitpid()后,子项的退出代码将存储为child_状态,使用waitpid和您可以测试的选项WNOHANG(在循环中)如果孩子已经退出,如果是,则检索退出代码。如何检索孩子的退出代码?如果我理解为0,那么如果我想在孩子的退出代码中将值从孩子传输到家长,该怎么办?@shaku:在成功调用waitpid()后,孩子的退出代码将存储在child_状态,而状态不是孩子的退出值:(我找到了解决方案…使用WEXITSTATUS(status)您可以找到您创建waitpid(…)的子级的退出代码。我尝试了,但状态不是子级的退出值:(我找到了解决方案…使用WEXITSTATUS(status)可以找到您创建waitpid(…)的子级的退出代码。如果您希望传输退出值以外的值,可以使用IPC(管道).你好!你是如何进入C程序的?如果你愿意,我们可以帮助你退出。如果你想传输除退出值以外的值,可以使用IPC(管道)。你好!你是如何进入C程序的?如果你愿意,我们可以帮你退出。