• 信号通讯编程


    编写两个应用程序,利用两个进程进行信号通信

    1、信号的概念:是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序或终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN,就会忽略该信号,如果是SIG_DFT,则会 采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中断当前进程正在执行的任务,转而去执行该信号的处理函数,返回后再继续执行被中断的任务。

    2、通过kill -l命令我们可以查看到Linux支持的信号列表。位于/usr/include/asm/signal.h

    SIGTST 20   停止进程的运行,但该信号可以被处理和忽略,用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号

    通过命令kill -[-s signal |-signal] pid可以向进程号为pid的进程发送signal信号(可以是信号宏名或者对应编号)

    3、传送信号给指定的进程----kill

    头文件:#include<signal.h>,#include<sys/types.h>

    原型:int kill(pid_t pid,int sig)

    参数说明:sig:设置信号处理函数所依赖的信号编号,pid:接收信号的进程号,pid>0将信号传给进程标识码为pid的进程;pid=0将信号传给和目前进程相同进程组的所有进程。pid<0将信号传给进程组识别码为pid绝对值的所有进程。

    返回值:执行成功则返回0,失败则返回-1.

    注意可以在命令行输入以下命令到相应进程7651:kill -n SIGINT 7651

    waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。http://baike.baidu.com/link?url=qfLQVjdillsIymnAx3Om5pvb72o5eXmzEf_qqZ3vB5yv5Le34eZoTo_RGW08LF5MvA2KmwL2EtiKaOmXNSAdta

    信号处理--signal

    头文件:#include<signal.h>

    函数原型:void (*signal(int signum,void(*handler)(int)))(int);

    或者typedef void(*sig_t)(int);sig_t signal(int signum.sig_t handler);

    参数说明:signum:设置信号处理函数所依赖的信号编号

    handler:信号处理函数

    如果参数handler不是函数指针,则必须是下列两个常数之一:SIG_IGN:忽略参数signum指定的信号。SIG_DFL:将参数signum指定的信号重设为预设的信号处理方式。

    返回值:返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。

    让进程暂停知道信号出现----pause

    头文件:#include<unistd.h>

    函数原型:int pause(void);

    参数说明:无

    返回值:只返回-1.

    send_signal.c

    函数atoi()是把一个字符串转换为一个整数!!!

    receive_signal.c

    先执行:

    然后执行:

    最后执行:

    结果:

  • 相关阅读:
    php AppStore内购付款验证
    NodeJS
    Electron 的中文乱码问题
    Flexbox 弹性盒子布局的使用
    springboot整合quartz
    第4章:逆向分析技术--64位软件逆向技术
    第51章:静态反调试技术——API查询
    第51章:静态反调试技术
    第48章:SEH
    第47章:PEB
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5558550.html
Copyright © 2020-2023  润新知