Linux 进程、线程和信号

目录


进程

获取进程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的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

信号

线程

上一篇:启动服务端口号被占用时的解决方法


下一篇:大数据之-Hadoop3.x_MapReduce_ReduceJoin案例Mapper---大数据之hadoop3.x工作笔记0130