步骤

  1. fork,退出父进程

    确保后面setsid可以执行成功

  2. setsid

    创建新的会话(session),要求该进程不是进程组长(process group leader)。

    当创建了新的会话,便脱离了原有的控制终端(tty)

  3. 再次fork,退出父进程

    可以防止潜在要求打开控制终端,因为控制终端必须要进程组长才可以打开

  4. chdir, 修改当前工作目录

    不影响umount

  5. umask, 设置默认的文件屏蔽字

  6. 关闭打开的文件描述符(0,1,2等,可通过ls /proc/pid/fd查看打开的文件描述符)

    若不关闭,虽然没有了控制终端,不会接受到相应控制信号,则仍能IO对应文件,如标准输出到启动时的终端,从终端读入!

    • 需要注意,默认为行缓冲!

留言

2016-04-26