问题描述
int dev_null_fd = open("/dev/null","w");
child_pid = fork()
if (!child_pid) {
dup2(dev_null_fd,0);
dup2(dev_null_fd,1);
dup2(dev_null_fd,2);
}
这段代码的意图是什么?它是否试图从子进程中丢弃 stdin、stdout 和 stderr,以便消息不会混合(污染)。
但是,来自子进程的消息仍然显示在外壳上。
这是怎么回事?
谢谢!
解决方法
这相当于在 shell 中完成的 < /dev/null >/dev/null 2>&1
。
它会导致文件描述符 0
、1
和 2
上的读/写和其他文件描述符操作在不返回错误的情况下不执行任何操作,并防止将来的文件描述符分配操作({ {1}}、open
、pipe
、...) 使用文件描述符 socket
、0
和 1
,只要它们保持打开状态.