<>信号

 
/* standard_pipe.c */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>

#define BUFSIZE 1024

int main()
{
 FILE *fp;
 char *cmd = "ps -ef";
 char buf[BUFSIZE];
 
 /*调用popen函数执行相应的命令*/
 if ((fp = popen(cmd, "r")) == NULL)
 {
  printf("Popen error\n");
  exit(1);
 }
 
 while ((fgets(buf, BUFSIZE, fp)) != NULL)
 {
  printf("%s",buf);
 }
 
 pclose(fp);
 exit(0);
}

结果:

lsb@ubuntu:~/gx/wangluo$ ./signal
Waiting for signal SIGINT or SIGQUIT...
^C 按下ctrl+c 打印如下:

I have get SIGINT
*****************************************************

#include <sys/wait.h>
#include <unistd.h>

int main()
{
 pid_t pid;
 int ret;
 
 /* 创建一子进程 */
 if ((pid = fork()) < 0)
 {
  printf("Fork error\n");
  exit(1);
 }
 
 if (pid == 0)
 {
  /* 在子进程中使用raise函数发出SIGSTOP信号,使子进程暂停 */
  printf("Child(pid : %d) is waiting for any signal\n", getpid());
  raise(SIGSTOP);
  exit(0);
 }
 else
 {
  /* 在父进程中收集子进程发出的信号,并调用kill函数进行相应的操作 */
  if ((waitpid(pid, NULL, WNOHANG)) == 0)
  {
   if ((ret = kill(pid, SIGKILL)) == 0)
   {
    printf("Parent kill %d\n",pid);
   }
   else
   {
    printf("Parent kill error\n");
   }
  }
  
  waitpid(pid, NULL, 0);
  exit(0);
 }

}

结果:

lsb@ubuntu:~/gx/wangluo$ ./kill_raise
Parent kill 4354
**************************************************

信号的封装

/* sigset.c */
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

/*自定义的信号处理函数*/
void my_func(int signum)
{
 printf("If you want to quit,please try SIGQUIT\n");
}

int main()
{
 sigset_t set,pendset;
 struct sigaction action1,action2;
 
 /* 初始化信号集为空 */
 if (sigemptyset(&set) < 0)
 {
  perror("sigemptyset");
  exit(1);
 } 
  
 /* 将相应的信号加入信号集 */
 if (sigaddset(&set, SIGQUIT) < 0)//等于set=[SIGQIUT]一个数组
 {
  perror("sigaddset");
  exit(1);
 }
 
 if (sigaddset(&set, SIGINT) < 0)
 {
  perror("sigaddset");
  exit(1);
 }
 //安装信号处理句柄
       if (sigismember(&set, SIGINT))
 {
  sigemptyset(&action1.sa_mask);
  action1.sa_handler = my_func;
  action1.sa_flags = 0;
  sigaction(SIGINT, &action1, NULL);
 }
 
 if (sigismember(&set, SIGQUIT))
 {
  sigemptyset(&action2.sa_mask);
  action2.sa_handler = SIG_DFL;
  action2.sa_flags = 0;
  sigaction(SIGQUIT, &action2,NULL);
 }
 
 /* 设置信号集屏蔽字,此时set中的信号不会被传递给进程,暂时进入待处理状态 */
 if (sigprocmask(SIG_BLOCK, &set, NULL) < 0)
 {
  perror("sigprocmask");
  exit(1);
 }
 else
 {
  printf("Signal set was blocked, Press any key!");
  getchar();
 }
 
 /* 在信号屏蔽字中删除set中的信号 */
 if (sigprocmask(SIG_UNBLOCK, &set, NULL) < 0)
 {
  perror("sigprocmask");
  exit(1);
 }
 else
 {
  printf("Signal set is in unblock state\n");
 }
 
 while(1);
 exit(0);
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?xml version='1.0' encoding='utf-8'?> <args version="0.0.1"> <page name="离线设备"> <editable>True</editable> <step>2</step> <name>刷新间隔(ms):</name> <scope> <max>500</max> <min>1</min> </scope> <type>int</type> <value>3</value> <row>0</row> <column>1</column> <object>renovate</object> <widget>label_spin</widget> <editable>True</editable> <step>4</step> <name>单帧长度:</name> <scope> <max>300</max> <min>1</min> </scope> <type>int</type> <value>2</value> <row>1</row> <column>1</column> <object>Singleframe</object> <widget>label_spin</widget> <editable>True</editable> <step>6</step> <name>起始位置:</name> <scope> <max>200</max> <min>1</min> </scope> <type>int</type> <value>1</value> <row>2</row> <column>1</column> <object>position</object> <widget>label_spin</widget> </page> <page name="信号分析"> <editable>True</editable> <name>分析算法选择</name> <max></max> <min></min> <scope> <chosen>1,2,3</chosen> </scope> <type>int</type> <value>1</value> <row>1</row> <column>0</column> <rowpage>1</rowpage> <columnpage>3</columnpage> <widget>label_combo</widget> <editable>True</editable> <name>model</name> <type>str</type> <value>true</value> <row>2</row> <column>0</column> <widget>check</widget> <editable>True</editable> <name>1</name> <type>str</type> <value>false</value> <row>2</row> <column>1</column> <widget>check</widget> <editable>True</editable> <name>2</name> <type>str</type> <value>false</value> <row>2</row> <column>2</column> <widget>check</widget> <editable>True</editable> <row>3</row> <column>0</column> <rowpage>3</rowpage> <columnpage>3</columnpage> <widget>label_slider</widget> </page> </args>解读一下这段xml文件
最新发布
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值