Linux进程管理系统调用函数总结

pid_t fork(void)
调用一次返回两次,子进程返回0,父进程返回子进程pid
pid_t getpid(void)
返回调用进程的pid
pid_t getppid(void)
返回调用进程的父进程pid
void exit(int status)
终结目前进程的运行,将参数status返回给父进程
0表示正常退出,非0表示非正常退出
执行一个新程序(暂缺)
pid_t wait(int *status)
暂时停止目前进程的执行,直到有信号来到或子进程结束,结束状态值由status返回,返回值为接受的子进程pid
(等一个子进程结束就返回)
exit(1)返回status=256, 按照256递增
pid_t waitpid(pid_t pid, int *status, int options)
pid<-1 等待进程组识别码为 pid 绝对值的任何子进程。
pid=-1 等待任何子进程,相当于 wait()
pid=0 等待进程组识别码与目前进程相同的任何子进程。
pid>0 等待任何子进程识别码为 pid 的子进程。
参数option:
WNOHANG 1 如果没有任何已经结束的子进程则马上返回, 不予以等待。
WUNTRACED 2 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。

子进程的结束状态返回后存于 status,底下有几个宏可判别结束情况:
WIFEXITED(status)如果子进程正常结束则为非 0 值。
WEXITSTATUS(status)取得子进程 exit()返回的结束代码,一般会先用 WIFEXITED 来判断是否正常结束才能使用此宏。
WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真
WTERMSIG(status) 取得子进程因信号而中止的信号代码,一般会先用 WIFSIGNALED 来判断后才使用此宏。
WIFSTOPPED(status) 如果子进程处于暂停执行情况则此宏值为真。一般只有使用 WUNTRACED 时才会有此情况。
WSTOPSIG(status) 取得引发子进程暂停的信号代码,一般会先用 WIFSTOPPED 来判断后才使用此宏。
(进程组暂缺)

kill -l查看信号宏定义
man 7 signal查看信号说明
SIGABRT 由调用abort函数产生,进程非正常退出
SIGALRM 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
SIGBUS 某种特定的硬件异常,通常由内存访问引起
SIGCANCEL 由Solaris Thread Library内部使用,通常不会使用
SIGCHLD 进程Terminate或Stop时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
SIGCONT 当被stop的进程恢复运行的时候,自动发送
SIGEMT 和实现相关的硬件异常
SIGFPE 数学相关的异常,如被0除,浮点溢出,等等
SIGFREEZE Solaris专用,Hiberate或者Suspended时候发送
SIGHUP 发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
SIGILL 非法指令异常
SIGINFO BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
SIGINT 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group进程
SIGIO 异步IO事件
SIGIOT 实现相关的硬件异常,一般对应SIGABRT
SIGKILL 无法处理和忽略。中止某个进程
SIGLWP 由Solaris Thread Libray内部使用
SIGPIPE 在reader中止之后写Pipe的时候发送
SIGPOLL 当某个事件发送给Pollable Device的时候发送
SIGPROF Setitimer指定的Profiling Interval Timer所产生
SIGPWR 和系统相关。和UPS相关。
SIGQUIT 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
SIGSEGV 非法内存访问
SIGSTKFLT Linux专用,数学协处理器的栈异常
SIGSTOP 中止进程。无法处理和忽略。
SIGSYS 非法系统调用
SIGTERM 请求中止进程,kill命令缺省发送
SIGTHAW Solaris专用,从Suspend恢复时候发送
SIGTRAP 实现相关的硬件异常。一般是调试异常
SIGTSTP Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
SIGTTIN 当Background Group的进程尝试读取Terminal的时候发送
SIGTTOU 当Background Group的进程尝试写Terminal的时候发送
SIGURG 当out-of-band data接收的时候可能发送
SIGUSR1 用户自定义signal 1
SIGUSR2 用户自定义signal 2
SIGVTALRM setitimer函数设置的Virtual Interval Timer超时的时候
SIGWAITING Solaris Thread Library内部实现专用
SIGWINCH 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
SIGXCPU 当CPU时间限制超时的时候
SIGXFSZ 进程超过文件大小限制
SIGXRES Solaris专用,进程超过资源限制的时候发送

int raise( int sig )
功能: 给进程自己发送一个信号
参数:sig:信号标识
成功则返回0, 出错则返回-1
unisigned int alarm( unsigned int seconds )
功能:在seconds秒后向自己发送一个SIGALRM信号
成功:如果调用此函数前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。
出错:-1
int kill( pid_t pid, int sig )
功能:发送一个信号给进程或者进程组
参数:pid:进程或进程组id,sig:信号标识
pid>0 将信号传给进程识别码为pid 的进程
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号广播传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid绝对值的所有进程
成功则返回0, 出错则返回-1
void (*signal(int sig,void (*func)(int)))(int)捕捉信号并执行动作
两个参数,信号码,返回的函数
两个预定义函数:
SIG_DFL 默认的信号处理程序。
SIG_IGN 忽视信号
(信号集暂缺)
信号量:

    // 信号量初始化
    int semid;
    key_t key=56789;
    semid = semget( key, 1, 0666); // 信号量键,信号量数目,权限,返回值为信号标识符

    // 改变信号量的值
    int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
    // sem_id是由semget()返回的信号量集标识符。
    // sem_ops是指向将要操作的数组的指针。
    // num_sem_ops是数组中的操作的个数。
    // 返回值:0,如果成功。-1,如果失败
    // struct sembuf
    // {
    //     unsigned short int sem_num ; //信号量个数,操作信号在信号集中的编号,第一个信号的编号是0
    //     short int sem_op;    // 信号量操作类型,信号量一次操作总需要改变的数值,+1是v操作,-1是p操作
    //     short int sem_flg;   //信号量操作标志 ,通常设置为SEM_UNDO,表示操作系统会跟踪当前进程对这个信号量的修改情况,如果这个进程在没有释放该信号量的情况下终止,操作系统将自动释放该进程持有的信号量,防止其他进程一直处于等待状态。
    // };
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值