当前位置: 技术问答>linux和unix
stderr的问题
来源: 互联网 发布时间:2015-08-15
本文导语: 一个daemon fork出的进程调用fprintf(stderr,...),第一次调用这个函数返回-1,错误愿因是没有tty,但以后的调用都只返回0,调用数次后进程就block住了。为什么会block住?是因为buffer满了吗? 如果进程忽略了SIGHUP,则终端...
一个daemon fork出的进程调用fprintf(stderr,...),第一次调用这个函数返回-1,错误愿因是没有tty,但以后的调用都只返回0,调用数次后进程就block住了。为什么会block住?是因为buffer满了吗?
如果进程忽略了SIGHUP,则终端关闭后进程并不退出。此时多次调用fprintf(stderr,....)进程也不会发生block,为什么?
如果关闭stderr后,再申请的文件描述符是否会和stderr的相同?
谢谢!
如果进程忽略了SIGHUP,则终端关闭后进程并不退出。此时多次调用fprintf(stderr,....)进程也不会发生block,为什么?
如果关闭stderr后,再申请的文件描述符是否会和stderr的相同?
谢谢!
|
如果关闭stderr后,再申请的文件描述符是否会和stderr的相同?
===========
stderr是流,不是描述字。标准出错的描述字默认是3,如果你close(3)然后再申请一个描述字,则会返回当前可用描述字的最小值,如果这个最小值是3,那么新申请到的就是3。但这个3并不表示标准出错。
===========
stderr是流,不是描述字。标准出错的描述字默认是3,如果你close(3)然后再申请一个描述字,则会返回当前可用描述字的最小值,如果这个最小值是3,那么新申请到的就是3。但这个3并不表示标准出错。
|
我在子进程中,使用fprintf(stderr,...)没有碰到类似问题啊。
对于子进程不退出的问题,可以添加如下语句来解决
if (fork() == 0){
/* 子进程 todo... */
}
while (waitpid(-1, NULL, WNOHANG) > 0)
;
对于子进程不退出的问题,可以添加如下语句来解决
if (fork() == 0){
/* 子进程 todo... */
}
while (waitpid(-1, NULL, WNOHANG) > 0)
;