Linux--进程控制

进程终止

进程终止是指一个正在运行的进程结束其执行并释放占用的系统资源的过程。进程可以通过以下几种方式终止:

正常终止:进程完成了它的任务,或者遇到了终止条件,例如调用了exit()函数或主函数执行完毕。
异常终止:进程可能会遇到一些异常情况,例如访问非法内存、发生除零错误等。操作系统会接收到这些异常,并强制终止进程。
被其他进程终止:另一个进程可以发送信号给目标进程,要求其终止。例如,在命令行中使用kill命令终止特定进程。
系统终止:操作系统可能需要终止某些进程以保护系统的稳定性,例如当系统资源不足时。

在进程终止时,操作系统会回收已分配给该进程的内存空间、文件描述符、打开的文件等资源,并将进程的退出状态返回给父进程。

在这里插入图片描述

自定义退出码

enum{
   
   success=0,
  open_err,                                                                                                   
  malloc_err 
};

const char* errorToDesc(int code)
{
   
  switch(code)
  {
   
    case success:
      return "success";
    case open_err:
      return "file open error";
    case malloc_err:
      return "malloc error";
    default:
      return "unknown error";
                                                                                                              
  }
}

 int Print()
{
   
  printf("hello Linux\n");
  printf("hello Linux\n");
  printf("hello Linux\n");
  printf("hello Linux\n");
  return 0;
}
int main()
{
   
 int n=Print();
  printf("n=%d\n",n);
  int code=malloc_err;
  printf("%s\n",errorToDesc(code));
  return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打印出退出码表示的含义

在这里插入图片描述

在这里插入图片描述
举例:
在这里插入图片描述

exit()和_exit()

exit()和_exit()都是用于正常终止进程的函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进程等待

进程等待指的是一个进程暂停其执行,直到满足某个条件或事件发生后才会继续执行。在操作系统中,进程可以通过等待来同步和协调与其他进程的操作。

wait

在Linux中,wait()是一个系统调用,是父进程在等待子进程执行完毕之前挂起自身,并等待子进程的终止状态
父进程可以使用wait()等待子进程的终止。当父进程调用wait()时,如果子进程已经终止,则父进程会立即返回,并可以通过子进程的终止状态来了解子进程终止的 原因和状态。

下面来看例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

waitpid()

waitpid()是Linux中的一个系统调用,用于等待指定子进程的终止并获取其终止状态。它可以用来在父进程中等待一个特定的子进程或者等待任何子进程的终止。

waitpid()函数的原型如下:

#include <sys/types.h>
#include <sys/wait.h>

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

其中,参数pid指定要等待的子进程的PID,可以有以下几种取值:
-1:等待任意子进程终止。
0:等待与调用进程在同一进程组的任意子进程终止。
大于0:等待指定PID的子进程终止。

参数status是一个指向整型变量的指针,用于存储子进程的终止状态。
参数options用于指定附加的选项,如WNOHANG表示非阻塞方式等待,即如果没有子进程终止立即返回。

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

WIFEIERED

在这里插入图片描述
在这里插入图片描述

非阻塞等待

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进程替换

进程替换是指在操作系统中将一个正在运行的进程替换为一个新的进程的过程。这个过程包括终止当前进程并加载新的程序代码、数据和资源,使新的进程开始执行。

在Linux中,常用exec()函数族来实现。
包括:

#include <unistd.h>`
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ...,char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

命名理解:

l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量

接下来看它们的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

多进程替换

在这里插入图片描述
在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 06:14:03       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 06:14:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 06:14:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 06:14:03       18 阅读

热门阅读

  1. 概率论在激光雷达的目标检测和跟踪中的应用

    2024-01-19 06:14:03       29 阅读
  2. vue+springboot的文件上传处理

    2024-01-19 06:14:03       29 阅读
  3. 【机器学习】DBSCAN算法

    2024-01-19 06:14:03       30 阅读
  4. boost库读写json格式文件

    2024-01-19 06:14:03       32 阅读
  5. 【SpringBoot系列】一键解决跨域问题

    2024-01-19 06:14:03       35 阅读
  6. $route和$router的区别

    2024-01-19 06:14:03       30 阅读
  7. Golang 网络编程

    2024-01-19 06:14:03       21 阅读