#include <unistd.h> pid_t getpid(void); //获取当前进程id pid_t getppid(void); //获取父进程id
返回值: 成功返回当前/父进程id。
cat /proc/1/status #获取init进程状态信息
#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。
#include <unistd.h> pid_t fork(void);
返回值: 如果返回值大于0,表示进入父进程;如果返回值等于0,表示进入子进程中,如果返回值等于-1,表示创建失败。
#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的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。