linux进程和会话

来源:互联网 发布:win10 pe 知乎 编辑:程序博客网 时间:2024/04/29 21:20

1.linux进程

       查看进程:ps -eo pid,ppid,cmd

       第一个进程:init

       其他进程:fork()

       进程树:pstree

       注意:创建进程时根据fork()函数返回值执行不同的分支,如果为0,则为子进程。这时可以执行自己的程序,在子进程的内存空间中耍起。若为正数则继续执行父进程程序。子程序执行完毕,返回参数通知父进程,之后父进程调用wait()函数。子进程退出的返回消息是写入内核的,父进程就是通过调用wait()函数从内核中取出信息并释放空间的。

       如果父进程先于子进程退出,那么子进程会以init()进程为父进程。

       如果父进程迟迟不对子进程进行wait()调用,那么会造成子进程变为僵尸进程,占用内存。

       最后关于进程和线程,unix系统好像有区别,而linux的线程可以看做特殊的进程。

2.信号

       我很喜欢vamei大神将系统比为一幢写字楼。很形象。确实内核是直接操作计算机硬件的,就像管理员。而进程是直接调用内核提供的接口或是调用库函数来实现功能。(库函数也是将内核提供的接口组装起来实现某一功能,如malloc)。而进程的比喻是管理员为进程分配的房间,其实也就是内存空间了。进程在自己的内存空间运转。

       那么信号就是由内核发出的(也可以是别的进程发的)某一规定的信号,也就是一整数值。内核发送给进程,进程在调用内核函数退出内核时读消息,读到信号。这时可以阻塞,可以立即处理等等。通常分为默认操作、无视以及自定义操作。

       补充:kill -SIGCONT 4958发送SIGCONT信号给4958进程。

3.进程组

       我们根据pstree可以查看进程树,其实进程是分组的。可以通过如下命令查看。

       ps -o pid,pgid,ppid,comm|cat其中pgid即为进程组号,这个号也是领导组的pid。领导进程可以先终止,子进程可以继续使用组号。使用组号方便信号发送给一个组的所有进程。

4.会话

       由进程产生会话,产生会话的进程称作会话的领导进程。会话的一个进程组叫作一个工作。有一个进程组称为前台进程,其他进程组称为后台进程。每个会话可以和一个终端关联,终端的输入输出可以传到前台进程,终端产生的信号如ctrl+c、ctrl+z、ctrl+\也会传到前台进程。

       一个命令可以通过末尾加&的方式让它在后台执行,如:

       ping localhost >log &

       这时前台显示[1]  18998其中第一项是工作号,第二项是pgid。我们可以通过kill向其发送信号。

       kill -SIGTERM %1

       还可以使用fg %1将后台进程变为前台进程。

       会话主要是和终端建立练习的,通过会话产生前台进程和后台进程,会话机制也实现了进程的管理。

       


0 0