• 发送信号


    发送信号
      –使用kill命令
    •在命令行使用kill命令,向指定进程发送信号。
      –使用kill函数

    #include <signal.h>

    #include <sys/types.h>

    int kill(pid_t pid, int sig);

    •参数pid指定一个要杀死的进程,而sig是要发送的信号。
     
     
     
     
    kill函数例子
    int main(int arg, char *args[])
    {
        if (arg > 1)
        {
            int pid = atoi(args[1]);
            kill(pid, SIGKILL);
        }
        else
        {
            printf("pid = %u
    ",getpid());
            sleep(60);
        }
        return 0;
    }
    发送信号
      –使用raise函数

    #include <signal.h>

    int raise(int signo);

    kill函数将信号发送给进程,raise函数允许进程向自身发送信号;
    raise(signo)等价于kill(getpid(), signo)。
     
     
     
    alarm函数设置了一个定时器,当定时器到了就发送SIGALRM信号。

    #include <unistd.h>

    nsigned int alarm(unsigned int seconds);

    seconds是计时器时间到后时钟的秒数。
    如果没有设置其他超时,函数返回0,否则返回值为前面安排超时中保留的秒数
    一个进程只能设置一次超时
    把seconds设置为0可以取消前面的超时设置。
     
     
     
    alarm函数例子
    void catch_Signal(int Sign)
    {
        switch(Sign)
        {
        case SIGALRM:
            printf("SIGALRM Signal
    ");
        }
    }
    int main(int arg, char *args[])
    {
        signal(SIGALRM, catch_Signal);
        alarm(1);
        pause();
        return 0;
    }
    abort函数。

    void abort(void);

    该函数发送SIGABRT信号给调用进程,进程不应该忽略这个信号。
    即使进程捕捉到SIGABRT这个信号,进程还是会异常退出。
    让进程捕捉SIGABRT的意图是,在进程终止前由其执行所需的清理操作。
     
     
     
    sleep函数。

    nsigned int sleep(unsigned int seconds);

    参数seconds指定了睡眠时间。
    超过seconds指定时间,函数返回。
    调用进程捕捉到一个信号并从信号处理程序返回。
     
     
     
    作业控制信号。
      –SIGCHLD-子进程已停止或终止;
      –SIGCONT-如果进程已经停止,使其继续运行;
      –SIGSTOP-停止信号,不能被捕捉或者忽略;
      –SIGTTIN-后台进程组成员读控制终端;
      –SIGTTOU-后台进程组成员写到控制终端。
    除SIGCHLD以外,大多数程序并不处理这些信号。
    Shell程序一般需要处理些信号。
    信号用于大多数复杂的应用程序中。
    理解信号处理对于Linux编程非常重要。
     
     
     
  • 相关阅读:
    TransformAroundPointPlugin
    探讨VMP 2.12.3 导入表修复
    spring+quartz 实现定时任务二
    一个奇怪的sql异常
    php程序里面使用sudo来执行应用程序
    spring+quartz 实现定时任务一
    让Git忽略SSL证书错误技巧
    个人开发网站集合
    完美解决KMplayer无法播放RMVB、RM电影问题
    如何知道自己的Windows是否已激活? 如何实现免激活升级? 重装Windows不需再激活?
  • 原文地址:https://www.cnblogs.com/shichuan/p/4496338.html
Copyright © 2020-2023  润新知