zoukankan      html  css  js  c++  java
  • linux signal之初学篇

    前言

    本博文只总结signal的应用,对signal的kernel实现暂不讨论。

    1. linux signal是什么?

    signal是linux提供的用于进程间通信的一种IPC机制。

    2. 如何发送signal来实现IPC?

    使用kill命令或kill函数可以发指定的进程发送signal。

    kill -0 pid,没有id为0的signal,通常这个命令仅仅是用来测试进程号为pid对应的进程是否存在;

    不过使用ps -A | grep pid应该同样可以做这项测试。

    kill -9 pid,强制杀掉一个进程。

    对于linux管理员来讲,经常会搭配ps/pstree/top等命令来查找系统中异常的进程并将其杀死。

    kill pid,如果没有指定某个signal,那默认会送SIGTERM给pid对应的进程。

    3. signal被如何处理?

    #include <signal.h>

    signal通常有三种处理方式:

    (1)显示的ignore,

    signal(SIGTSTP, SIGIGN);

    这样子的话你的进程就会收到这条signal,但是处理的方式是ignore;

    (2)你的进程可能会对某个特定的signal感兴趣,这时就可以捕获这个signal并去处理它,

    struct sigaction t_act, t_oldact;
    t_act.sa_flags = SA_NODEFER;
    t_act.sa_sigaction = _my_signal_hander;
    sigaction(SIGUSR1, &t_act, &t_oldact);
    static void _my_signal_handler()
    {
        /* do your thing */
    }

    (3)按照默认的方式处理,这样kernel会按照已经预设好的流程来处理这个signal。

    4. 如何确定每一条signal对应的num,比如SIGUSR1对应的num值是多少?

    请看signal.h这个header file

    #define SIGHUP 1

    #define SIGUSR1 10

    在shell下面kill -10 pid与kill SIGUSR1 pid作用是一样的。

    5. signal的应用?

    待补充。

  • 相关阅读:
    数组
    对象
    js继承
    js原型原型链
    es6(初级)
    canvas背景
    Angular.js进阶
    Angular.js-2入门
    angular.js-1初识
    js之广告
  • 原文地址:https://www.cnblogs.com/riskyer/p/3304145.html
Copyright © 2011-2022 走看看