文档章节

Linux 开发 -- 进程控制

i
 iblackangel
发布于 2017/04/28 15:28
字数 383
阅读 16
收藏 1

进程标识符

  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);
    

© 著作权归作者所有

下一篇: C++ const 用法
i
粉丝 0
博文 47
码字总数 14784
作品 0
广州
程序员
私信 提问
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
04/21
0
0
迅为4412开发板Linux驱动教程之内核开发基础

视频教程:http://v.youku.com/v_show/id_XMTMwNjAwMDc0OA==.html 主要内容 • Linux体系结构 • Linux内核结构 • Linux内核源码目录结构 Linux体系结构 从上图可知,Linux体系结构由用户空...

topeet
2015/08/10
242
0
cgroup在ceph中的应用(1)

一、 Cgroup介绍1. Cgroup是什么Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最...

秦牧羊
2015/04/16
0
0
浅入浅出 Android 安全:第一章 Android

第一章 Android 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 安全架构的理解不仅帮助我了解 Android 的工作原理,而且为我开启了如何构建移动操作系...

apachecn_飞龙
2016/11/27
0
0
.Net Core MVC初学习

  .net core已经出来很长一段时间了,没有很好的学习过,现在工作不那么忙了,参考官方文档,在这里记录自己的学习过程!   ASP.NET Core 是一个跨平台的高性能开源框架,用于生成基于云...

IJustWannRun
02/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊中国的通信行业:从“七国八制”到“中华”脊梁

本期文章和大家一起来聊一聊我曾经从事过的通信行业吧。最近各方面信息的泛滥,包括和华为的同学聊天,自己确实也感慨颇多。想想我自己本科主修通信工程,研究生再修信息与通信工程,从本科开...

CodeSheep
今天
4
0
MDK:ARM M451M:exceed the range of code meory, continue to erase or not?

问题: 代码空间超限 几天前就遇到:exceed the range of code meory, continue to erase or not? 如下所示: 解决过程 开始以为中MDK软件的128KB限制,如是就不能生成HEX文件,应该链接时有提...

SamXIAO
今天
1
1
OSChina 周六乱弹 —— 因违反《中华人民共和国治安管理处罚法》第四十四条之规定

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :#今日歌曲推荐# 惊艳分享谷微的单曲《安守本份》(@网易云音乐) 《安守本份》- 谷微 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
397
9
Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
8
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部