7 进程环境
7.1 引言
7.2 main函数
int main( int argc, char *argv[] );
7.3 进程终止
(1) exit函数
#include <stdlib.h>
void exit( int status );
void _Exit( int status );
#include <unistd.h>
void _exit( int status );
(2) atexit函数
#include <stdlib.h>
void atexit( void (*func)(void) );
7.4 命令行参数
7.5 环境表
7.6 C程序的存储空间布局
7.7 共享库
7.8 存储器分配
#include <stdlib.h>
void *malloc( size_t size );
void *calloc( size_t nobj, size_t size );
void *realloc( void *ptr, size_t newsize );
void free( void *ptr );
7.9 环境变量
#include <stdlib.h>
char *getenv( const char *name );
#include <stdlib.h>
int putenv( char *str );
int setenv( const char *name, const char *value, int rewrite );
int unsetenv( const char *name );
7.10 setjmp和longjmp函数
#include <setjmp.h>
int setjmp( jmp_buf env );
void longjmp( jmp_buf env, int val );
7.11 getrlimit和setrlimit函数
#include <sys/resource.h>
int getrlimit( int resource, struct rlimit *rlptr );
int setrlimit( int resource, const struct rlimit *rlptr );
struct rlimit{
rlim_t rlim_cur;
rlim_t rlim_max;
};
7.12 小结
8 进程控制
8.1 引言
8.2 进程标识符
#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 );
8.3 fork函数
#include <unistd.h>
pid_t fork( void );
8.4 vfork函数
8.5 exit函数
8.6 wait和waitpid函数
#include <sys/wait.h>
pid_t wait( int *statloc );
pid_t waitpid( pid_t pid, int *statloc, int options );
pid ==-1 等待任一子进程
pid > 0 等待与pid相等的子进程
pid == 0 等待其组ID等于调用进程组ID的任一子进程
pid < -1 等待其组ID等于pid绝对值的任一子进程
8.7 waitid函数
#include <sys/wait.h>
int waitid( idtype_t idtype, id_t id, siginfo_t *infop, int options );
8.8 wait3和wait4函数
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/resource.h>
pid_t wait3( int *statloc, int options, struct rusage *rusage );
pid_t wait4( pid_t pid, int *statloc, int options, struct rusage *rusage );
8.9 竞争条件
8.10 exec函数
#include <unistd.h>
int execl( const char *pathname, const char *arg0, ... /* (char *)0 */ );
int execv( const char *pathname, char *const argv[] );
int execle( const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */ );
int execve( const char *pathname, char *const argv[], char *const envp[] );
int execlp( const char *filename, const char *arg), ... /* (char *)0 */ );
int execvp( const char *filename, char *const argv[] );
8.11 更改用户ID和组ID
#include <unistd.h>
int setuid( uid_t uid );
int setgid( gid_t gid );
(1)
#include <unistd.h>
int setreuid( uid_t ruid, uid_t euid );
int setregid( gid_t rgid, gid_t egid );
(2)
#include <unistd.h>
int seteuid( uid_t uid );
int setegid( gid_t gid );
8.12 解释器文件
8.13 system函数
#include <stdlib.h>
int system( const char *cmdstring );
8.14 进程会计
8.15 用户标识
#include <unistd.h>
char *getlogin( void );
8.16 进程时间
#include <sys/times.h>
clock_t times( struct tms *buf );
8.17 小结
9 进程关系
9.1 引言
9.2 终端登录
9.3 网络登录
9.4 进程组
#include <unistd.h>
pid_t getpgrp( void );
pid_t getpgid( pid_t pid );
int setpgid( pid_t pid, pid_t pgid );
9.5 会话
#include <unistd.h>
pid_t setsid( void );
pid_t getsid( pid_t pid );
9.6 控制终端
9.7 tcgetpgrp, tcsetpgrp和tcgetsid函数
#include <unistd.h>
pid_t tcgetpgrp( int filedes );
int tcsetpgrp( int filedes, pid_t pgrpid );
#include <termios.h>
pid_t tcgetsid( int filedes );
9.8 作业控制
9.9 shell执行程序
9.10 孤儿进程组
9.11 FreeBSD实现
9.12 小结
10 信号
10.1 引言
10.2 信号概念
10.3 signal函数
#include <signal.h>
void ( *signal( int signo, void (*func)( int ) ) ) (int);
10.4 不可靠的信号
10.5 中断的系统调用
10.6 可重入函数
10.7 SIGCLD语义
10.8 可靠信号术语和语义
10.9 kill和raise函数
#include <signal.h>
int kill( pid_t pid, int signo );
int raise( int signo );
10.10 alarm和pause函数
#include <unistd.h>
unsigned int alarm( unsigned int seconds );
int pause( void );
10.11 信号集
#include <signal.h>
int sigemptyset( sigset_t *set );
int sigfillset( sigset_t *set );
int sigaddset( sigset_t *set, int signo );
int sigdelset( sigset_t *set, int signo );
int sigismember( const sigset_t *set, int signo );
10.12 sigprocmask函数
#include <signal.h>
int sigprocmask( int how, const sigset_t *restrict set, sigset_t *restrict oset );
10.13 sigpending函数
#include <signal.h>
int sigpending( sigset_t *set );
10.14 sigaction函数
#include <signal.h>
int sigaction( int signo, const struct sigaction * restrict act, struct sigaction *restrict oact );
struct sigaction{
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
void (*sa_sigaction)(int, siginfo_t *, void *);
};
10.15 sigsetjmp和siglongjmp函数
#include <setjmp.h>
int sigsetjmp( sigjmp_buf env, int savemask );
void siglongjmp( sigjmp_buf env, int val );
10.16 sigsuspend函数
#include <signal.h>
int sigsuspend( const sigset_t *sigmask );
10.17 abort函数
#include <stdlib.h>
void abort( void );
10.18 system函数
10.19 sleep函数
#include <unistd.h>
unsigned int sleep( unsigned int seconds );
10.20 作业控制信号
10.21 其他特征
(1)信号名字
#include <signal.h>
void psignal( int signo, const char *msg );
char *strsignal( int signo );
(2)信号映射
#include <signal.h>
int sig2str( int signo, char *str );
int str2sig( const char *str, int *signop );
10.22 小结