Linux下raise函数,信号发送函数kill()和raise()

本文关键字: 信号发送函数,kill(),raise()

kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口)。这里需要注意的是,它不仅可以中止进程(实际上发出SIGKILL信号),也可以向进程发送其他信号。

与kill()函数不同的是,raise()函数允许进程向自身发送信号。

表1列出了kill()函数的语法要点。

表1 kill()函数语法要点

所需头文件

#include

#include

函数原型

int kill(pid_t pid, int sig)

函数传入值

pid

正数:要发送信号的进程号

0:信号被发送到所有和当前进程在同一个进程组的进程

1:信号发给所有的进程表中的进程(除了进程号大的进程外)

sig:信号

函数返回值

成功:0

出错:-1

表2列出了raise()函数的语法要点。

表2 raise()函数语法要点

所需头文件

#include

#include

函数原型

int raise(int sig)

函数传入值

sig:信号

函数返回值

成功:0

出错:-1

下面的示例首先使用fork()创建了一个子进程,接着为了保证子进程不在父进程调用kill()之前退出,在子进程中使用raise()函数向自身发送SIGSTOP信号,使子进程暂停。接下来在父进程中调用kill()向子进程发送信号,在该示例中使用的是SIGKILL,读者可以使用其他信号进行练习。

/* kill_raise.c */

#include

#include

#include

#include

#include

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);

}

}

waitpid(pid, NULL, 0);

exit(0);

}

}

该程序运行结果如下:

$ ./kill_raise

Child(pid : 4877) is waiting for any signal

Parent kill 4877

热点链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值