linux实施进程嵌套,请问linux C编程时可以中断嵌套吗

比如在SIGINT信号的handler中,能否被自己中断?

如果可以中断的话,最多可以嵌套几层啊?

|

是可以自己中断的

设置用户自己的信号中断处理函数,以SIGINT信号为例:

int flag=0;

void myself()

{

flag=1;

printf("get signal SIGINTn");

/*若要重新设置SIGINT信号中断处理函数为本函数则执行以

*下步骤*/

void (*a)();

a=myself;

signal(SIGINT,a);

flag=2;

}

main()

{

while (1) {

sleep(2000); /*等待中断信号*/

if (flag==1) {

printf("skip system call sleepn");

exit(0);

}

if (flag==2) {

printf("skip system call sleepn");

printf("waiting for next signaln");

}

}

}

11.kill()

功能:向一个或一组进程发送一个信号.

语法:#include

#include

int kill(pid,sig);

pid_t pid;

int sig;

说明:本系统调用向一个或一组进程发送一个信号,该信号由参数sig指

定,为系统给出的信号表中的一个.若为0(空信号)则检查错误但

实际上并没有发送信号,用于检查pid的有效性.

pid指定将要被发送信号的进程或进程组.pid若大于0,则信号将

被发送到进程号等于pid的进程;若pid等于0则信号将被发送到所

有的与发送信号进程同在一个进程组的进程(系统的特殊进程除

外);若pid小于-1,则信号将被发送到所有进程组号与pid绝对值

相同的进程;若pid等于-1,则信号将被发送到所有的进程(特殊系

统进程除外).

信号要发送到指定的进程,首先调用进程必须有对该进程发送信

号的权限.若调用进程有合适的优先级则具备有权限.若调用进程

的实际或有效的UID等于接收信号的进程的实际UID或用setuid()

系统调用设置的UID,或sig等于SIGCONT同时收发双方进程的会话

号相同,则调用进程也有发送信号的权限.

若进程有发送信号到pid指定的任何一个进程的权限则调用成功,

否则调用失败,没有信号发出.

返回值:调用成功则返回0,否则返回-1.

例子:假设前一个例子进程号为324,现向它发一个SIGINT信号,让它做

信号处理:

kill((pid_t)324,SIGINT);

|

相同的信号会自动屏蔽,比如连续多次alarm你会发现只会调用一次处理函数。但是不同的信号可能会嵌套,给你一个直观的例子:

#include

#include

unsigned int flag = 0;

void

alrm_handler ()

{

FILE* fp;

printf ("get signal SIGALRMn");

while(1) {

// while循环里面只是做一些耗时的工作,没有其他作用。

fp = fopen("/tmp/1.txt", "rb+");

fclose(fp);

if(!(flag++ % 1000))

printf (".");

}

}

void int_handler()

{

printf ("get signal SIGINTn");

}

main ()

{

signal(SIGALRM, alrm_handler);

signal(SIGINT, int_handler);

alarm(2);

while (1)

{

sleep (2000);

printf ("skip system call sleepn");

}

}

按CTL-C会给程序发送SIGINT信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值