linux 学习之 进程

        关于volatile 关键字:告诉编译程序不必优化,直接从内存读取数据而不是寄存器,以确保状态的变化能及时反映出来。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

关于进程:Linux在启动的时候创建进程init,顾名思义这是起始进程,init进程是唯一一个没有父进程的进程。 init进程为每一个终端(tty)创建一个新的管理进程,这些进程在终端等待用户的登录,一旦用户登录成功则为用户创建一个shell进程,由shell进程等待并接受用户输入的命令信息。

 此外init进程还负责接收孤儿进程,所谓孤儿进程即创建该进程的父进程结束了,而子进程还活着,则该子进程成为孤儿进程,init进程负责收养该进程。

进程的状态:

(1)TASK_RUNNING(运行):进程是可执行的,或者正在运行或正在就绪队列等待运行

(2)TASK_INTERRUPYIBLE(可中断):进程正在睡眠,也就是被阻塞,等待某些条件的达成。一但该条件达成,内核就将该进程设置成运行态,处于该状态的进程也会因为收到信号而被唤醒并投入运行。

(3)TASK_UNINTERRUPTIBLE(不可中断)出了不会因为接收到信号而被唤醒从而进入运行态,别的都和可中断的相同。这个状态通常在进程必须在等待时不受干扰或等待时间很快就发生时出现。因为该状态不对任何信号做反应,所以用的比较少。

(4)TASK_ZOMBIE(僵死):该进程已经结束,但是父进程还没有调用wait()调用接收该子进程的结束信息。为了使父进程获得该进程的结束信息,该进程还保留着进程描述符,等待父进程调用wait调用来结束。

(5)TASK_STOPPED(暂停)进程暂停执行,比如当进程收到以下信号后,进入暂停状态。

  SIGSTOP    :停止进程执行

SIGTSTP:从终端发来信号停止进程

SIGTTIN:来自键盘的中断

SIGTTOUT:后台进程请求输出



ps命令查看进程信息   https://linux.cn/article-4743-1.html

pstree可以将所有进程显示成树状

使用cat命令查看文件内容  cat 文件路径

进程标识符(PID):

进程上下文和中断上下文详解

用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递 很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存 器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的 一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“ 中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

LINUX完全注释中的一段话:

当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称 为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的 所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结 构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程 的执行。

进程上下文是一种内核所处的操作模式,此时内核代表进程执行--例如执行系统调用或运行内核线程。
上下文context: 上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。



一、父进程fork出子进程,然而并不知道子进程什么时候才能结束,调用wait()函数得到子进程的结束信息,

#include<sys/wait.h>

pid_t wait(int *statloc); 

调用wait()的进程会阻塞,知道该进程的任意一个子进程结束。wait()会取得结束的子进程的信息,并且返回该子进程的进程ID


pid_t waitpid(pid_t pid,int *statloc,int options) 该函数等待一个指定的子进程结束。

二、

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。


僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。


http://www.cnblogs.com/Anker/p/3271773.html

关于僵尸进程和守护进程的信息可以看该网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值