0
点赞
收藏
分享

微信扫一扫

Linux详解--多任务操作--1.进程(2)进程的进阶(适合初学者拿来直接进行基础学习,全CSDN最详细,推荐收藏)

时光已翩然轻擦 2022-04-21 阅读 12
linuxc语言

通过上一篇文章进行进程的基础讲解,本文将带大家进行进程的进阶讲解及应用。

首先为大家引出两个问题?何为僵尸进程僵尸进程如何产生的?

僵尸进程:

  • 进程执行结束,空间没有被回收 

僵尸进程如何产生:

  • 子进程运行结束,父进程没有回收子进程空间

僵尸进程就像进程的名字一样肯定是不好的一个名字,空间没有被回收就会被占用,从而影响性能,我们当然是想要避免以上状况的产生,那么:

孤儿进程相对于僵尸进程来说不会产生未被占用的空间,是我们比较理想的一种情况,另一种方法运用wait函数则是我们今天想要介绍的重点。

函数接口:wait

  • pid_t wait(int *status);

功能:

  • 回收子进程空间

参数:

  • status: 进程退出时候的状态,如果不关心其退出状态一般用NULL表示,如果要回收进程退出状态,则用WEXITSTATUS回收。

返回值:

  • 成功返回回收到子进程的PID
  • 失败返回-1 

函数接口:waitpid

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

功能:

  • 回收指定进程的资源,和wait功能相似,比wait更灵活

参数:

pid:

  • <-1 回收指定进程组内的任意子进程 (-100.等待GID=100的进程组中的任意子进程)
  • -1 回收任意子进程,组内外
  • 0 回收和当前调用waitpid一个组的所有子进程,组内 
  • > 0 回收指定ID的子进程

status:

  • 子进程退出时候的状态。
  • 如果不关注退出状态用NULL。

options 选项:

  • 0 表示回收过程会阻塞等待。
  • WNOHANG 表示非阻塞模式回收资源。

返回值:

  • 成功 返回接收资源的子进程pid
  • 失败  -1
  • 设定为非阻塞且没有回收到子进程返回0

函数接口:exec函数簇

exec函数簇分为两大类:execl与execv函数类

以上两段代码均为执行ls -l 的文件命令,execl为列表形式查询,execv为指针数组传参方式传递指令

功能:

  • 利用进程空间执行另外一段代码(执行完不返回原进程)

参数:        (搭配execl与execp使用)

  • p:在系统路径下找要执行的代码

int execlp(const char *file, const char *arg, ...);

int execvp(const char *file, char *const argv[]);

返回值:

  • 成功无法返回
  • 失败返回-1

函数接口:system

int system(const char *command);

功能:

  • 使用该函数可以将shell命令直接在代码中执行。

参数:

  • command要执行的shell命令

以上就为作为第一章进程的内容的一个补充,并且进程的结束,下一章节将为大家进行线程的介绍,希望大家多多关注,并且对于文中的内容可以指正与补充,让我们在评论区多多交流!谢谢大家支持

举报

相关推荐

0 条评论