Linux教程

Linux 进程、线程和信号

本文主要是介绍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 进程、线程和信号的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!