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

  • 阻塞和接触阻塞信号
    偷个懒
    linux系统信号与进程总结

  • 编写信号处理程序