session:
session其实就是对应着一个termial,启动终端后在这个termial中创建的所有进程都属于这个session。
进程组:
进程组对应着termial中执行的一条命令行,这个命令行创建的进程及其子进程都属于该进程组。如果命令行加上“&”,则属于后台程序组;如果不加“&”则属于前台程序组。由于前台程序组会阻塞termial(即,前台程序结束前,无法向termial输入新命令),所以最多只能有一个前台进程组。
controlling process:
在terminal中输入“ps“,必然会有一个命令为CMD为bash的进程,这个进程就是当前terminal的controlling process,用于处理各种输入。
setpgid:
这个函数的用处好像不大
setsid:
setsid可用于创建daemon进程。一个非进程组leader进程调用setsid后,会生成一个session,而新的session不会绑定terminal,因此也就生成了一个daemon进程。
总结:
进程组对应着一个命令行,因此也就是对应着一个应用程序的入口。因此进程组也就为用户控制某一程序启动的一组进程提供了方便。
terminal应该是对应着一个用户,命令行形式下的linux,每个用户应该只能使用一个terminal,因此可以方便的对一个用户的所有进程进行控制。
当然现在的linux都是支持同一用户登录多个terminal的,同时窗口界面也导致同一用户会同时启动多个terminal,因此terminal 之上还有一层用户管理。使用”ps -u"命令可以查看某个用户建立的所有进程。
思考:
嵌入式的管理模式。
嵌入式通常都会简化设计,通常嵌入式只有一个用户,也只有一个terminal。使用busybox时,ps命令甚至不支持打印sid。另外嵌入式中似乎多进程设计也很少,因此进程组的概念用处也不大。
在嵌入式中,使用多线程编程似乎是更经济实惠的方式。
阅读(523) | 评论(0) | 转发(0) |