Linux--进程控制

简介: 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月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
37 0
|
3月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
658 2
|
3月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
69 2
|
18天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
52 4
linux进程管理万字详解!!!
|
9天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
48 8
|
6天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
18天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
52 4
|
19天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
20天前
|
消息中间件 存储 Linux
|
27天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
33 1