Linux 进程、线程和信号
2022/1/4 7:09:19
本文主要是介绍Linux 进程、线程和信号,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 进程
- 获取进程id
- /proc/PID 获取与进程相关的信息
- uname() 获取主机系统的标识信息
- fork() 创建子进程
- wait() 阻塞等待子进程结束
- 守护进程、孤儿进程和僵尸进程
- 信号
- 线程
进程
获取进程id
#include <unistd.h> pid_t getpid(void); //获取当前进程id pid_t getppid(void); //获取父进程id
返回值: 成功返回当前/父进程id。
/proc/PID 获取与进程相关的信息
cat /proc/1/status #获取init进程状态信息
uname() 获取主机系统的标识信息
#include <sys/utsname.h> int uname(struct ustname* utsbuf); //utsname数据结构 struct utsname { char sysname[_UTSNAME_LENGTH]; char nodename[_UTSNAME_LENGTH]; char release[_UTSNAME_LENGTH]; char version[_UTSNAME_LENGTH]; char machine[_UTSNAME_LENGTH]; #ifdef _GUN_SOURCE char domainname[_UTSNAME_LENGTH]; #endif }
返回值: 成功返回0,失败返回-1。
fork() 创建子进程
#include <unistd.h> pid_t fork(void);
返回值: 如果返回值大于0,表示进入父进程;如果返回值等于0,表示进入子进程中,如果返回值等于-1,表示创建失败。
wait() 阻塞等待子进程结束
#include <sys/wait.h> pid_t wait(int* stauts); pid_t waitpid(pid_t pid,int* status, int options); int waitid(idtype_t idtype,id_t id,siginfo_t* infop,int options);
status: 返回进程的终止状态。
pid: 意义如下:
pid > 0 | 表示等待进程ID为pid的子进程 |
---|---|
pid = 0 | 表示等待与父进程同意个进程组的所有子进程 |
pid < -1 | 表示等待进程组标识与pid绝对值相等的所有子进程 |
pid = -1 | 表示等待任意子进程 |
options: 取值如下:
WUNTRACED | 除了返回终止进程的信息外,还返回因信号而停止的子进程信息 |
---|---|
WCONTINUED | 返回那些因收到SIGCONT信号而恢复执行的已停止子进程的状态信息 |
WNOHANG | 如果参数pid所指定的子进程并未 发生状态改变,则立即返回0.如果并无与pid匹配的子进程,则报错,错误号置为ECHILD。 |
返回值: 成功返回终止进程的id,失败返回-1。
守护进程、孤儿进程和僵尸进程
守护进程:就是服务,独立于终端以外,关闭终端之后,该进程任然存在。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
信号
线程
这篇关于Linux 进程、线程和信号的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法