Linux 开发 -- 进程控制

进程标识符

  1. 头文件
    #include <unistd.h>
    
  2. 进程标识符

pid_t getpid(void); /* 返回值:调用进程的进程 ID / pid_t getppid(void); / 返回值:调用进程的父进程 ID / uid_t getuid(void); / 返回值:调用进程的实际用户 ID / uid_t geteuid(void); / 返回值:调用进程的有效用户 ID / gid_t getgid(void); / 返回值:调用进程的实际组 ID / gid_t getegid(void); / 返回值:调用进程的有效组 ID */


## **fork** 函数

一个现有进程可以调用 `fork` 函数创建一个新进程。

```c
#include <unistd.h>

pid_t fork(void);

/* 返回值:子进程中返回 0,父进程中返回子进程 ID,出错返回 -1 */

示例代码:

#include <unistd.h>

int main(int argc, char *argv[])
{
	pid_t pid;

	if ((pid = fork()) < 0) {
		err_sys("fork error");
	} else if (pid == 0) {		/* child */
		child();
	} else {			      	/* parent */
		parent();
	}
	
    return 0;
}

使 fork 失败的两个主要原因是:系统中已经有太多的进程(通常意味着某个方面出了问题),或者该实际用户 ID 的进程总数超过了系统限制。其中 CHILD_MAX 规定了每个实际用户 ID 在任一时刻可具有最大的进程数。

获取 CHILD_MAX

  1. 头文件

    #include <unistd.h>
    
  2. 运行时限制可以通过调用下面三个函数中的一个而取得。

    	long sysconf(int name);
    	long pathconf(const char *path, int name);
    	long fpathconf(int fd, int name);
    
  3. 具体的 name 参数根据系统不同而不同,在 ubuntu 14.04 里面的 <bits/confname.h> 记录这三个函数所用到的参数名。其中 pathconffpathconf_PC_* 开头,sysconf_SC_* 开头。

    long child_max = sysconf(_SC_CHILD_MAX);
    

转载于:https://my.oschina.net/iblackangel/blog/889182

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值