计算机交互中的信号的传递

/*
 * 信号:
 * 信息是通知进程已发生某种条件的一种技术。例如,若某一进程执行除法操作,其除数为零,则将名为SIGFPE的信号发送给该进程。进程如何处理信号有三种选择:
 * 1.忽略该信号;
 * 2.按照系统默认方式处理;
 * 3.提供一个函数,信号发生时则调用该函数。使用这种函数,我们将能知道什么时候产生了信号,并按照所希望的方式来处理;
 */

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>

#define MAXLINE 100

static void sig_int(int);

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

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

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

		if(strcmp(buf,"-1") == 0)
			break;

		if((pid = fork()) < 0)
			perror("fork error");
		else
		{
			if(pid == 0)
			{
				execlp(buf,buf,(char *)0);
				/*
				 * duplicate the actions of the shell in searching for an executable file if the 
				 * specified filename does not contain a slash(/) character.The followed by the 
				 * list of directories return pathnames specified in the PATH ecvironment variable.
				 * if this variable isn't defined , the path list defaults to the current directory
				 * followed by the list of directories return bu confstr(_CS_PATH) 
				 */
				exit(127);
			}
		}

		if((pid = waitpid(pid,&status,0)) < 0)
			perror("waitpid error");
	}
	return 0;
}


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


程序的执行结果:

ls
MySignal  MySignal.cpp
cd /
ls
MySignal  MySignal.cpp
top
top - 09:42:10 up 43 min,  2 users,  load average: 0.17, 0.16, 0.14
Tasks: 174 total,   1 running, 172 sleeping,   0 stopped,   1 zombie
%Cpu(s):  1.2 us,  0.5 sy,  0.0 ni, 97.5 id,  0.8 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:   5906812 total,  1371072 used,  4535740 free,   145492 buffers
KiB Swap:  1998844 total,        0 used,  1998844 free,   488604 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                                   
   63 root      20   0     0    0    0 S   6.4  0.0   0:01.63 kworker/u:6                                                                                               
 2050 lgy       20   0 1581m 112m  46m S   6.4  1.9   0:41.23 cinnamon                                                                                                  
 2152 lgy       20   0  268m 4332 3052 S   6.4  0.1   0:04.92 ibus-daemon                                                                                               
    1 root      20   0 24592 2528 1376 S   0.0  0.0   0:01.40 init                                                                                                      
    2 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kthreadd                                                                                                  
    3 root      20   0     0    0    0 S   0.0  0.0   0:00.16 ksoftirqd/0                                                                                               
    6 root      rt   0     0    0    0 S   0.0  0.0   0:00.40 migration/0                                                                                               
    7 root      rt   0     0    0    0 S   0.0  0.0   0:00.01 watchdog/0                                                                                                
    8 root      rt   0     0    0    0 S   0.0  0.0   0:00.95 migration/1                                                                                               
    9 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/1:0                                                                                               
   10 root      20   0     0    0    0 S   0.0  0.0   0:00.11 ksoftirqd/1                                                                                               
   11 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 watchdog/1                                                                                                
   12 root      rt   0     0    0    0 S   0.0  0.0   0:00.90 migration/2                                                                                               
   14 root      20   0     0    0    0 S   0.0  0.0   0:00.21 ksoftirqd/2                                                                                               
   15 root      rt   0     0    0    0 S   0.0  0.0   0:00.02 watchdog/2                                                                                                
   16 root      rt   0     0    0    0 S   0.0  0.0   0:00.34 migration/3                                                                                               
   17 root      20   0     0    0    0 S   0.0  0.0   0:00.80 kworker/3:0                                                                                               
   18 root      20   0     0    0    0 S   0.0  0.0   0:00.17 ksoftirqd/3                                                                                               
   19 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 watchdog/3                                                                                                
   20 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 cpuset                                                                                                    
   21 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 khelper                                                                                                   
   22 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kdevtmpfs                                                                                                 
   23 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 netns                                                                                                     
   25 root      20   0     0    0    0 S   0.0  0.0   0:00.02 sync_supers                                                                                               
   26 root      20   0     0    0    0 S   0.0  0.0   0:00.00 bdi-default                                                                                               
   27 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kintegrityd                                                                                               
   28 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kblockd                                                                                                   
   29 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 ata_sff                                                                                                   
   30 root      20   0     0    0    0 S   0.0  0.0   0:00.00 khubd                                                                                                     
   31 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 md                                                                                                        
   35 root      20   0     0    0    0 S   0.0  0.0   0:00.00 khungtaskd                                                                                                
   36 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kswapd0                                                                                                   
   37 root      25   5     0    0    0 S   0.0  0.0   0:00.00 ksmd                                                                                                      
   38 root      39  19     0    0    0 S   0.0  0.0   0:00.00 khugepaged                                                                                                
   39 root      20   0     0    0    0 S   0.0  0.0   0:00.00 fsnotify_mark                                                                                             

q
man printf
cp
cp: 缺少了文件操作数
请尝试执行"cp --help"来获取更多信息。
mv
mv: 缺少了文件操作数
请尝试执行"mv --help"来获取更多信息。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值