事实上每个终端设备都对应一个不同的设备文件, /dev/tty提供了一个通用的接口, 一个进程要访问它的控制终端既可以通过/dev/tty也可以通过该终端设备所对应的设备文件来访问. ttyname函数可以由文件描述符查出对应的文件名...所以, 组长进程标识: 其进程组ID其进程ID
可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死
组长进程可以创建一个进程组, 创建该进程组中的进程, 然后终止....组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程。
setsid
pid_t setsid(void);
创建一个会话,并以自己的ID设置进程组ID,同时也是新会话的ID。...守护进程的特点
后台服务程序
独立于终端控制
周期性执行某任务
不受用户登陆注销影响
一般采用以d结尾的名字(服务)
创建守护进程模型
fork子进程, 父进程退出, 所有工作在子进程中进行形式上脱离了控制终端...; 非必须
重设文件权限掩码, umask()函数, 防止继承的文件创建屏蔽字拒绝某些权限, 增加守护进程灵活性; 非必须
关闭文件描述符, 继承的打开文件不会用到, 浪费系统资源, 无法卸载, close