Linux下的进程
1.进程概念:
一个运行起来的程序(程序的执行实例)。
程序的概念:一个存储在磁盘某个目录中的可执行文件。
程序运行之后,相应代码将会加载到内存,即使删除对应的可执行程序,也不影响程序的继续运行 因为可执行程序存储在磁盘上
2.操作系统作为一个管理者应怎样管理呢? 先描述,在组织
描述:进程pcb -----在Linux中叫task_struct.
组织:链表(创建一个进程,将pcb插入链表中,进程终止,把该pcb从链表中删除)。
3. 进程pcb最基本要包含哪些文件
1.进程ID:进程的身份标示,同一台主机上,每个进程都有一个非负整型表示的唯一进程ID (pid)。
2.一组内存指针
指向代码和代码所依赖的数据。
3.辅助操作系统进行进程调度的属性
(a) 优先级:决定进程被调度到 CPU 上执行的顺序
(b) 上下文:保存了进程上次在 CPU 上执行的现场
4.进程状态:
进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据。
Linux下的进程有哪几种状态:
-
可运行状态:处于这种状态的进程,要么正在运行、要么正准备运行。
-
等待状态:处于该状态的进程正在等待某个事件或某个资源,它肯定位于系统中的某个等待队列中。
等待状态的进程分为两种:可中断的等待状态和不可中断的等待状态。
处于可中断等待态的进程可以被信号唤醒,如果收到信号,该进程就从等待状态进入可运行状态,并且加入到运行队列中,等待被调度;而处于不可中断等待态的进程是因为硬件环境不能满足而等待,例如等待特定的系统资源,它任何情况下都不能被打断,只能用特定的方式来唤醒它。 -
暂停状态:此时的进程暂时停止运行来接受某种特殊处理。通常当进程接收到SIGSTOP、SIGTSTP、SIGTTIN或 SIGTTOU信号后就处于这种状态。例如,正接受调试的进程就处于这种状态。
-
僵死状态
进程虽然已经终止,但由于某种原因,父进程还没有执行wait()系统调用,终止进程的信息也还没有回收。顾名思义,处于该状态的进程就是死进程,这种进程实际上是系统中的垃圾,必须进行相应处理以释放其占用的资源。
5.进程终止:
1.正常终止:
- 从 main 返回:
在 main 函数内执行 return 语句,这等效于调用 exit。 - 调用 exit:
包括调用各终止处理程序,然后关闭所有标准 IO 流。 - 调用 _exit 或 _Exit:
为进程提供一种无需运行终止处理程序或信号处理程序而终止的方法。不冲洗标准 IO 流。 - 最后一个线程从启动例程中返回:
执行 return 语句。但该线程的返回值不用作进程的返回值。当最后一个线程从其启动例程返回时,该进程以终止状态 0 返回。 - 从最后一个线程中调用 pthread_exit
进程终止状态总是 0。
2.异常终止
- 调用 abort:
产生一个 SIGABRT 信号。 - 接到一个操作系统所发的信号
- 最后一个线程对“取消”请求作出响应
默认情况下,“取消”以延迟方式发生:一个线程要求取消另一个线程,若干时间后,目标线程终止。
不管进程如何终止,最后都会执行内核中的同一段代码。这段代码为相应进程关闭所有打开描述符,释放它所使用的存储器等。