LINUX期末复习---进程与进程管理

来源:互联网 发布:铭赛点胶机编程说明书 编辑:程序博客网 时间:2024/05/17 03:26

一、LINUX的进程状态

image

僵死态:当父进程还没有结束前,子进程就已经先结束了,这时子进程的资源没有人来回收。通常父进程需要用wait来等待子进程的结束。
进程的模式:用户模式(执行用户程序),内核模式(执行操作系统代码)
进程的类型:系统进程,用户进程

二、进程管理

①fork函数
功能:创建一个全新的进程。
头文件
#include
#include
函数原型:pid_t wait (int * status);
说明:这个系统调用对当前进程进行复制,在进程表里创建出一个项目,新进程与原进程几乎一样,执行的是相同的代码,只是新进程有自己的数据空间、环境和文件描述符。
返回值:父进程调用返回新子进程ID,新进程继续执行;在子进程返回0。
举例
pid_t new_pid;
new_pid = fork();
switch(new_pid)
{
    case -1:break;
    case 0:break
    default:break;
}

②wait函数
函数处理的基本过程
如果父进程没有子进程,则出错返回。
如果发现有一个终止的子进程,则取出子进程的进程号,把子进程的CPU使用时间等加到父进程上,释放子进程占用的task_struct和系统空间堆栈,以供新进程使用。
如果发现有子进程,但都不处于终止态,则父进程睡眠,等待由相应的信号唤醒。
功能:等待子进程中断或结束
头文件:
#include
#include
函数原型:pid_t wait (int * status);
说明:函数会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会同时返回。如果不在意结束状态值,则参数status可以设成NULL。子进程的结束状态值请参考waitpid()。
返回值:如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno中。
举例
cut1

③execl函数
头文件:#include
函数原型
int execl(const char * path,const char * arg,....);
返回值:成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
说明
execl()用来执行参数path字符串所代表的文件路径,参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
举例
#include
main()
{
    execl(“/bin/ls”,”ls”,”-l”,”/etc/passwd”,(char * )0);
}

④exit(#include “stdlib.h” )与_exit(#include “unistd.h”)
exit()在结束调用它的进程之前,要进行如下步骤:
1.cleanup();//清除I/O缓冲区,将其写到标准输入或输出
2.在atexit()注册的函数;
最后调用_exit()函数。。。

原创粉丝点击