[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. java泛型编译时被擦除引起多态的破坏,用 桥方法解决此类问题。(java 桥方法)

    在JVM虚拟机中泛型编译的时候,会出现类型擦除.但是,在多态场景中,编译时,擦除方式会出现多态被破坏的可能. 举个栗子: A.java public class A<T> { void g ...

  2. app 支付宝 支付 alipaySdk

    function pay(P1: JString; P2: Boolean): JString; cdecl;    function fetchOrderInfoFromH5PayUrl(P1: J ...

  3. FTP服务器原理

    21.1 FTP服务器原理   使用明码传输方式,且有相当多的安全危机历史.因此一般使用功能较少的vsftpd这个软件.   21.1.1 FTP功能简介   有以下功能 文档传输与管理 不同等级的用 ...

  4. openssl使用多种方法签名、自签名

    1.自建CA 自建CA的机制:1.生成私钥2.创建证书请求,在创建证书请求过程中由于需要提供公钥,而公钥来源于私钥,所以也需要指定私钥来创建证书请求,而实际上这里提供私钥的作用就是提取其中的公钥,这一 ...

  5. Res_Orders_02

    一.燃尽图展示 二.项目进展 1.实现用户名找回 2.css样式嵌入

  6. HttpClient接口测试之会话保持

    HttpClient接口测试之会话保持     HttpClient4.X自带会话保持功能,使用同一个HttpClient未关闭的连接即可保持登陆会话,如果多个HttpClient想要使用一个登陆会话 ...

  7. Oracle数据库根据时间查询

    ' and trans_dt between to_date('2010-12-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and to_date('2011-12-3 ...

  8. DGV换行操作

    DGV.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True;

  9. underscore.js库的浅析

    Underscore并没有在原生的JavaScript对象原型中进行扩展,而是像jQuery一样,将数据封装在一个自定义对象中(下文称“Underscore对象”).生成一个Underscore对象: ...

  10. log4net 记录日志到sqlserver

    参考:http://blog.csdn.net/niuyongjie/article/details/5777625 demo