Linux进程控制(中)

简介: Linux进程控制

所以就可以改良成这个样子:

结论:

进程退出会变成僵尸,之后将自己的推出结果放入PCB,wait/waitpid是系统调用,有资格去读取PCB中的资源。

阻塞与非阻塞

阻塞

父进程一直在等子进程结束回收资源。

非阻塞

父进程一段时间过来看一下子进程是否结束,如果没结束可以做其他事情,这个叫轮询方式。

WNOHANG: 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进程的ID。

NO1就父进程是不是询问子进程是否退出。

如果在询问之后不子进程没有准备完毕,父进程则可以做一些其他的事情。

至于非阻塞和阻塞谁更好,这个要看实际场景。

进程替换

之前说过创建子进程的目的是让子进程去帮忙“做事”,可是为什么要去让子进程帮忙做事呢?

首先说目的:

1.想让子进程执行父进程磁盘代码其中的一部分。

2.想让子进程执行一个全新的程序。

替换原理

一个可执行程序被首先被加载到内存中,然后执行代码,然后代码中有操作让本程序执行一个新程序,这个时候就会将指定执行的程序的代码和数据覆盖掉原本的代码和数据,在整个过程中并没有产生新的进程,这就是为什么每次都要去创建一个子进程来去执行新程序。

替换函数

执行系统命令

这些函数的作用是将指定的程序加载到内存当中,让指定的进程执行。

int execl(const char *path, const char *arg, …);

第一个参数是说如何找到程序,第二个参数是我们在命令行解释器怎么调用该程序就怎么写,最后用NULL结尾。

这几个函数统一的是exec,这个函数最后一个l 意思是 list 将参数一个一个传入exec*

这里执行完execl之后,后边打印process就不会执行,因为整个程序的代码和数据已经被覆盖掉了。

并且这类函数返回值只有-1,表示错误。

因为成功之后接下来的代码是不会执行的,所以返回一个正确的值进行判断也毫无意义。

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

结尾是p的第一个参数不用去指定路径了,他会在环境变量PATH,进行可执行程序的查找

int execv(const char *path, const char *argv[], …);

v是vector的意思,第二个参数是让我们把所有可执行参数放入数组中传过去。

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

这个就不演示了,这两个参数上面都说过。

上面的只是在执行系统命令,那么想执行自己写的程序该怎么办呢?

执行自己写的程序

首先来说一下makefile这个文件:

先创建一个.c文件

如果我想让test.c去调用process.c,首先要生成这两个可执行程序,但是makefile只会默认的生成第一个可执行程序,后面的就不会再去执行,所以我们要这样写:

因为是调用程序,所以不管是什么语言的程序都可调用。

int execle(const char *path, const char *arg, …,char *const envp[]);

最后一个参数是自定义环境变量的意思。

现在的自定义环境变量还没定义,所以为空。

相关文章
|
12天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
35 1
|
2月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
44 0
|
7天前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
15天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
1月前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
134 4
linux进程管理万字详解!!!
|
20天前
|
缓存 算法 Linux
Linux内核的心脏:深入理解进程调度器
本文探讨了Linux操作系统中至关重要的组成部分——进程调度器。通过分析其工作原理、调度算法以及在不同场景下的表现,揭示它是如何高效管理CPU资源,确保系统响应性和公平性的。本文旨在为读者提供一个清晰的视图,了解在多任务环境下,Linux是如何智能地分配处理器时间给各个进程的。
|
1月前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
72 8
|
28天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
58 1
|
28天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
1月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
70 4