实验五:Linux进程管理

您所在的位置:网站首页 实验五进程的创建与控制 实验五:Linux进程管理

实验五:Linux进程管理

2023-09-16 06:18| 来源: 网络整理| 查看: 265

实验五:Linux进程管理 一、实验目的 熟练使用进程操作函数编写程序。熟练掌握exec函数族的用法。掌握同步进程的方法。 二、实验环境

Ubantu或Centos

三、实验内容 1.创建进程 创建一个进程利用循环结构创建多个进程 2.exec函数族

使用execv()函数调用用户程序,更改子进程的功能。

3.进程同步

使用循环创建多个子进程,使用wait()函数完成所有子进程的回收工作。

4.进程管理命令

熟练使用进程管理命令管理与查看进程信息。 需练习的进程管理命令有:ps、top、pstree、pgrep、nice、bg、fg、jobs、kill。

四、实验步骤 1. 创建进程——fork() 预备知识

fork()函数用于创建进程,该函数的原型如下:

pid_t fork(void);

函数调用成功后,

父进程中的fork()函数返回子进程的pid,子进程中的fork()函数返回0;

函数调用失败则返回-1。

fork()函数的使用 2. exec函数族 预备知识 execl() execl()函数的原型如下: int execl(const char *path, const char *arg, ...); execlp() execlp()函数的原型如下: int execlp(const char *file, const char *arg, ...); execle() execle()函数的原型如下: int execle(const char *path, const char *arg, ..., char * const envp[]); execv() execv()函数的原型如下: int execv(const char *path, char *const argv[]); execvp() execvp()函数的原型如下: int execvp(const char *file, char *const argv[]); execve() execve()函数的原型如下: int execve(const char *path, char *const argv[], char *const envp[]); exec函数族的使用 3. 进程同步 预备知识

进程同步中用到的函数有wait()和waitpid()。

wait()函数

wait()函数的原型如下:

pid_t wait(int *status);

wait()的功能是阻塞等待子进程终止,回收子进程资源,调用wait()函数的进程会被挂起,进入阻塞状态,直到它的某个子进程变为僵尸态。 wait()函数中的参数status可以为NULL,当其不为NULL时,参数status将用于获取回收子进程的退出状态。 退出状态存放在参数status的低8位中,可通过Linux系统中提供的一组宏函数来获取,其中最常用的宏函数有WIFEXITED()和WEXITSTATUS(),它们的参数与wait()函数相同,都是一个整型的status。 宏函数的功能分别如下:

WIFEXITED(status):用于判断子程序是否正常退出,若是,返回非零值;否则返回0。WEXITSTATUS(status):WEXITSTATUS()通常与WIFEXITED()结合使用,若WIFEXITED返回非零值,即正常退出时,使用该宏可以提取出子进程的返回值。 waitpid()函数

waitpid()函数的原型如下:

pid_t waitpid(pid_t pid,int *status,int options);

waitpid()也可回收子进程资源,但可通过传递不同参数,设置waitpid()函数回收子进程的方式,以及回收子进程的范围。

参数pid一般是进程的pid,但也会有其它取值。 参数pid的取值及其意义分别如下:

pid>0时,只等待pid与该参数相同的子进程;pid=-1时,waitpid()函数与wait()函数作用相同,将阻塞等待并回收一个子进程;pid=0时,等待同一个进程组的所有子进程;pid


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3