[a] getpid / getppid / getuid / geteuid / getgid / getegid

#include <unistd.h>
pid_t getpid(void)
pid_t getppid(void)
uid_t getuid(void)
uid_t geteuid(void)
gid_t getgid(void)
gid_t getegid(void) 
  • 获取当前进程的进程id、父进程id、实际用户id、有效用户id、实际组id、有效组id

[b] fork

#include <unistd.h>
pid_t fork(void) //若成功,子进程返回 0,父进程返回子进程 ID;若出错,返回 -1 
  • 父子进程的执行没有固定的先后順序,需要手动控制
  • 子进程不继承父进程设置的文件锁
  • 子进程的未处理闹钟被清除
  • 子进程的未处理信号集设置为空集

[c] wait / waitpid

#include <sys/wait.h>
pid_t wait(int *wstatus)
pid_t waitpid(pid_t pid, int *wstatus, int options)
//成功返回进程 ID,出错返回 -1 或 0(非阻塞返回值) 
  • 子进程终止状态写入 wstatus,可使用 WIFEXITED(wstatus)、WIFSIGNALED(wtatus) 等宏提取子进程的退出状态编号,前者返回非 0 表示正常终止,后者返回非 0 表示异常终止
  • 任一子进程终止将使 wait 返回,无子进程终止将阻塞
  • waitpid 可用于等待指定 ID 的子进程,options 常用取值为 WNOHNAG ,表示非阻塞,若子进未终止,立即返回,此时返回值为 0

[d] execve / fexecve

#include <unistd.h>
int execve(const char *path, char *const argv[], char *const envp[])
int fexecve(int fd, char *const argv[], char *const envp[])
//成功无返回值,出错返回 -1 
  • argv 是以 \0 结尾的字符串数组,内含可执行程序的参数,按惯例,首个参数通常设置为程序名称,可设置为其它值如 NULL
  • envp 是以 \0 结尾的字符串数组,内含需要指定的环境变量键值对(name=value)
  • 其它可用的 exec 类函数有:execl / execlp /execv /execvp,exec*p 类函数只需要可执行文件名称,无须指定绝对路径

[e] setuid / setgid / seteuid / setegid

#include <unistd.h>
int setuid(uid_t uid)
int setgid(gid_t gid)
int seteuid(uid_t uid)
int setegid(gid_t gid)
//成功返回 0,出错返回 -1 
  • 特权进程将 real-id、effective-id、saved-set-user/grp-id 等三项均设置为参数指定的 ID,非特权进程只设置有效用户ID或有效组ID
  • sete*id 函数只设置有效用户ID或有效组ID

[f] system

#include <stdlib.h>
int system(const char *cmdstring)
//成功返回 SHELL 的终止状态,若出错,不同执行阶段有不同的返回值,fork 出错返回 -1,exec* 出错返回 127 
  • 通常仅用于执行简单的无参数命令,如:date

[g] getlogin

#include <unistd.h>
char *getlogin(void)
//成功返回指向登陆名称的字符串指针,出错返回 NULL 
  • 鉴于同一个用户 ID 可能存在多个登陆名称(配置不同的 shell),应使用 getlogin 函数提取当前登陆的用户名

[h] nice / getpriority / setpriority

#include <unistd.h>
int nice(int incr) //成功返回新的 nice 值(-NZERO~NZERO -1),出错返回 -1
#include <sys/resource.h>
int getpriority(int which, id_t who) //成功返回 新的 nice 值(-NZERO~NZERO -1),出错返回 -1
int setpriority(int which, id_t who, int value) //成功返回 0,出错返回 -1 
  • nice 只作用调用进程本身,不能更改其它进程的 nice 值,返回的新 nice 值是参数 incr 与 原 nice 值之和,若新值超过上限或下限,则自动设置为 -NZERO 或 NZERO
  • setpriority 可修改其它进程的 nice 值,which 参数可选的值有 PRIO_PROCESS / PRIO_PGRP / PRIO_USER,who 参数的含义由 which 参数决定;若 who 为 0,则使用调用进程自身的信息;value 参数与原 nice 值之和即新 nice 的值

[i] times

#include <sys/times.h>
clock_t times(struct tms *tp) //成功返回 Wall time(以 cpu tick 为单位),出错返回 -1 
struct tms {
clock_t tms_utime; //用户 CPU 时间
clock_t tms_stime; //系统 CPU 时间
clock_t tms_cutime; //包含调用进程及其 wait 子进程所消耗的用户 CPU 时间
clock_t tms_cstime; //包含调用进程及其 wait 子进程所消耗的系统 CPU 时间
  • 进程开始及结束时各运行一次,取函数返回值及 tms 结构体内各项的时间差
  • 需要使用 sysconf(_SC_CLK_TCK) 的返回值,将结果转换成以秒为单位
  • 类似函数:getrusage

[08]APUE:进程控制的更多相关文章

  1. 【APUE | 08】进程控制

    函数fork 博文链接: 1. 代码示例: #include "apue.h" ; char buf[] = "a write to stdout\n"; in ...

  2. [APUE]进程控制(上)

    一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...

  3. [APUE]进程控制(中)

    一.wait和waitpid函数 当一个进程正常或异常终止时会向父进程发送SIGCHLD信号.对于这种信号系统默认会忽略.调用wait/waidpid的进程可能会: 阻塞(如果其子进程都还在运行); ...

  4. [APUE] 进程控制

    APUE 一书的第八章学习笔记. 进程标识 大家都知道使用 PID 来标识的. 系统中的一些特殊进程: PID = 0: 调度进程,也称为交换进程 (Swapper) PID = 1: init 进程 ...

  5. [APUE]进程控制(下)

    一.更改用户ID和组ID 可以用setuid设置实际用户ID和有效用户ID.可以用setgid函数设置实际组ID和有效组ID. #include <sys/types.h> #includ ...

  6. (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. APUE(8)---进程控制(1)

    一.进程标识 每个进程都有一个非负整型标识的唯一进程ID.因为进程ID标识符总是唯一的,常将其用做其他标识符的一部分以保证其唯一性.进程ID虽然是唯一的, 但是却是可以复用的.ID为0的进程通常是调度 ...

  8. 进程控制(Note for apue and csapp)

    1. Introduction We now turn to the process control provided by the UNIX System. This includes the cr ...

  9. apue学习笔记(第八章 进程控制)

    本章介绍UNIX系统的进程控制,包括创建新进程.执行程序和进程终止. 进程标识 每一个进程都有一个非负整数表示的唯一进程ID,除了进程ID,每个进程还有一些其他标识符.下列函数返回这些标识符 #inc ...

  10. 《UNIX环境高级编程》(APUE) 笔记第八章 - 进程控制

    8 - 进程控制 Github 地址 1. 进程标识 每个进程都有一个非负整型表示的 唯一进程 ID .进程 ID 是可复用的(延迟复用算法). ID 为 \(0\) 的进程通常是调度进程,常常被称为 ...

随机推荐

  1. XML.01-语法简介

    body,td { font-family: calibri; font-size: 10pt }   XML.01-语法简介 文档声明 元素(标签) 属性 注释 特殊字符 CDATA区域 处理指令 ...

  2. 利用nginx来屏蔽指定的user_agent的访问以及根据user_agent做跳转

    对于做国内站的我来说,我不希望国外蜘蛛来访问我的网站,特别是个别垃圾蜘蛛,它们访问特别频繁.这些垃圾流量多了之后,严重浪费服务器的带宽和资源.通过判断user agent,在nginx中禁用这些蜘蛛可 ...

  3. CListCtlr 控件的常见用法

    今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtr ...

  4. JS function

    JS函数的定义 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. JS函数的声明 function functionname(){语句} 注意:function必须是小写,否则会报错. J ...

  5. SQL Server 导入数据失败:无法在只读列“Id”中插入数据

    解决方案: 在数据库导入"选择源表和源视图"->点击对应表后的“编辑映射”按钮->勾选“启用标识列插入”->导入即可.

  6. git代理设置方法解决

    git config --global https.proxy http://127.0.0.1:1080 git config --global https.proxy https://127.0. ...

  7. jQuery 取消事件冒泡 阻止后续内容执行 闭包函数 (学习笔记)

    1.取消事件冒泡 <title>取消事件冒泡</title> <style> div { border:solid 1px black; } </style& ...

  8. modelsim搭建uvm环境及实例

    Modelsim SE-64 10.2c 自带编译好的uvm-1.1d 脚本new_run.do set UVM_DPI_HOME C:/modeltech64_10.2c/uvm-1.1d/win6 ...

  9. 关于JS 事件冒泡和onclick,click,on()事件触发顺序

    今天在给JQgrid中的标签添加click事件的时候,发现一个问题. JQgrid的table中,点击任何位置,都会勾选点击行的checkbox,而我希望在点击我的标签的时候,不要勾选checkbox ...

  10. JSP中文乱码问题

    参考此URL http://blog.csdn.net/beijiguangyong/article/details/7414247 eclipse 设置: