linux系统信号与进程总结
1.job和process的区别
job:为了解释命令行而创建的子进程
process:处理程序的实例化
在任何时刻。最多只有一个前台job和n个后台job
输入的信号会被发送到前台进程组中的每个进程
2.有关进程的函数
-
获取进程ID
pid_t geipid(void);
pid_t getppid(void); 这两者都返回调用者或其父进程的PID -
创建和终止进程
void exit(int status); 以status退出状态来终止进程
pid_t fork(void); 子进程返回0.父进程返回进程的PID,如果出错,则为-1 -
回收子进程
pid_t waitpid(pid_t pid, int *statusp, int options) 如果成功则为子进程的PID,如果WNOHANG,则为0,如果其他错误,则为-1
(详细参数见PDF 553页) -
让进程休眠
unsigned int sleep(unsigned int secs); 请求的时间量到了,sleep返回0,否则返回剩余的休眠数
int pause(void); 让调用函数休眠,直到该进程收到一个信号 -
加载并运行程序
int execve(const char *filename, const char *argv[], const char *envp[]); 如果成功不返回,如果错误,返回-1.
该函数加载并运行可执行目标文件filename,带参数列表argv和环境变量列表envp。
char *getenv(const char *name) 若存在返回指向name的指针,若无匹配的,则为NULL(其他环境变量函数见P559)
3.有关信号的函数
信号是用来通知进程某个系统事件
-
发送信号
pid_t getpgrp(void); 返回调用进程的进程组ID
int setpgid(pid_t pid, pid_t pgid); 将进程pid的进程组改为pgid,成功返回0,如错误返回-1 -
用kill函数发送信号
int kill(pid_t pid, int sig); 如果pid大于0,那么把信号号码sig给进程pid。如果pid等于0,kill发送信号到调用进程的每个进程。如果pid<0,kill发送给进程组|pid|的所有成员。若成功则为0,若错误则为-1. -
用alarm函数发送信号
unsigned int alarm(unsigned int secs); 在sec秒后发送一个SIGALRM给调用进程 -
接收信号
sighandler_t signal(int signum, sighandler_t handler);详见P567 -
阻塞和接触阻塞信号
偷个懒 -
编写信号处理程序