Advanced Programming in UNIX Environment Episode 6

信号(signal)用于通知进程发生了某种情况。进程有以下3种处理信号的方式:
(1). 忽略信号。有些信号表示硬件异常。因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。
(2). 按照系统默认方式处理。
(3). 提供一个函数,信号发生时调用该函数,这被称为捕捉信号。
添加了有关信号的程序

#include "apue.h"
#include <sys/wait.h>

static void sig_int(int);

int main(void)
{
    char buf[MAXLINE];
    pid_t pid;
    int status;

    if(signal(SIGINT,sig_int)==SIG_ERR);
        err_sys("signal error");

    printf("%% ");
    while(fgets(buf,MAXLINE,stdin)!=NULL)
    {
        if(buf[strlen(buf)-1]=='\n')
            buf[strlen(buf)-1]=0;

        if((pid=fork())<0)
        {
            err_sys("fork error");
        }
        else if(pid==0)
        {
            execlp(buf,buf,(char*)0);
            err_ret("couldn't execute: %s",buf);
            exit(127);
        }

        if((pid=waitpid(pid,&status,0))<0)
            err_sys("waitpid error");
        printf("%% ");
    }

    exit(0);
}

void sig_int(int signo)
{
    printf("interrupt \n%%");
}

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...