- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我上一个问题的从头开始写的。我真正需要实现的是:将来 parent 能够关闭 pipe 的一端,这样 grandchild (守护进程)就会收到 < strong>SIGPIPE。当我使用 1 种解决方案时,它就像一个魅力(但这是在任何 fork 之前)。当我使用 2 个解决方案时,只有一个写入生成 SIGPIPE。我该如何检查?通过发出:strace -f ./a.out 2>&1 | grep 管道
#include <sys/wait.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
void child_become_daemon( int pfd[][2], int id )
{
int pid = fork();
if( pid == 0 )
{
dup2( pfd[id][1], 1 );
close( pfd[id][0] );
sleep( 5 ); //this is to be sure that opposite end is already closed
write( 1, "child", strlen( "child" ) );
}
if( pid > 0 )
{
exit( 0 );
}
}
int main()
{
int pid;
int numKids = 5;
int procNum;
int pfd[numKids][2];
for( int i = 0; i < numKids; ++i )
{
pipe( pfd[ i ] );
//close( pfd[i][0] );//1 all killed - perfect
}
for( procNum = 0; procNum < numKids; procNum++ ) {
pid = fork();
if( pid == 0 ) {
break;
}
}
if( pid == 0 ) {
printf( "I'm child %d\n", procNum );
child_become_daemon( pfd, procNum );
}
else {
for( int i = 0; i < numKids; ++i )
{
printf( "closing %d\n", i );
close( pfd[i][0] );//2 why only one will get killed
close( pfd[i][1] );
}
char buf[124] = { 0 };
for( int i = 0; i < numKids; ++i )
{
read( pfd[i][0], buf, 124 );
printf( "buf: %s\n", buf );
}
int p, status;
while ((p = wait(&status)) != -1)
fprintf(stderr, "p %d exits with %d\n", p, WEXITSTATUS(status));
}
return 0;
}
最佳答案
孙辈继承了所有 5 个管道,因此他们每个人都打开了其他 4 个管道以供读取,因此没有 SIGPIPE。如果有一个“不幸”的时机,最后一个活着的人可能会得到一个 SIGPIPE,因为其他人都走了。
[编辑]你也无法真正知道,因为如果他们的 parent 已经死了,你就不能等待孙子进程。而且您不会在孙子孙女身上发现 SIGPIPE。
关于c - 只有一个孙子被杀,而不是 5 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887788/
我需要索引 3 个级别(或更多)的子级-父级。例如,级别可能是一位作者、一本书和那本书中的角色。 但是,当索引超过两层时,has_child 和 has_parent 查询和过滤器会出现问题。如果我有
我制作了一个简单的 react 任务列表,它允许我添加新任务。我现在希望能够删除任务,但无法了解如何将函数属性传递给子/孙组件。 我想通过 deleteTaskFromState函数属性一直到 成分。
我正在循环属于 frag 的 span 元素类(class)。我想检测当前所在的frag元素是否是属于frag的a span元素的最小儿子/孙子/孙子(从左到右)类并属于 cond类,并且在其文本中有
在处理命令行的 JavaFX 模型时,我遇到了以下问题: 如果我运行一个运行另一个进程的进程(例如批处理文件)(例如使用简单的 start notepad 打开记事本)我似乎无法正确确定批处理文件何时
我正在 linux (Ubuntu) 上做一个小项目,我需要一个人通过身份验证才能访问服务。我的想法是,此身份验证应与进程及其子进程一起存储,而不是与 linux 用户本身一起存储。 此身份验证应通过
假设我有一个像这样的模板模态 react 组件(经过简化以使我的问题更清晰): function Modal(props) { const hide=()=>{ documen
过去 2 小时在网上搜索这个。任何帮助是极大的赞赏。 场景是这样的,我们有一个Questionnaire,有Steps,每个step都有input sets,每个input set有questions
我正在尝试解析编码不当的 XML 并输出标签的节点名称和内容(仅当它存在时),并且仅当字符串名称=内容 > 30 天时。 到目前为止,我可以使用 ElementTree 搜索子元素,但我需要有关嵌套信
我正在进行一个小实验。我正在尝试使用 :focus 创建一个没有 javascript 的 onclick 菜单。我遇到的问题是孙子,单击它仍然会关闭父级。我尝试使用 ~ 选择器使其保持打开状态,但它
我有一个 3 个数据库设置,例如父->子->孙,到目前为止,我可以设法获取特定父级的子级,但无法深入到另一个级别。 class Parent : Object { @objc dynamic
ver data = [ {"id": 1,"parent": 0,"name": "Parent"}, {"id": 2,"parent": 1,"name": "Child"},
我是一名优秀的程序员,十分优秀!