linux的父进程向子进程发kill信号例子以及对子进程的状态进行判断
2015-04-09 19:10
393 查看
先看一个父进程向子进程发kill信号例子:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t pid;
int status;
pid = fork();
if (0 == pid)
{
printf("Hi, I'm child process!\n");
sleep(10);
}
else if (pid > 0)
{
printf("Send signal to child process (%d)\n", pid);
sleep(1);
kill(pid, SIGABRT);
wait(&status);
if (WIFSIGNALED(status))
{
printf("Child process received singal %d\n", WTERMSIG(status));
}
}
else
{
printf("Fork wrong!\n");
return 1;
}
return 0;
}
判断子进程退出状态的宏:
子进程的结束状态返回后存于status,底下有几个宏可判别结束情况
WIFEXITED(status)如果子进程正常结束则为非0值。
WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。
WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真
WTERMSIG(status)取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。
WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。
WSTOPSIG(status)取得引发子进程暂停的信号代码。
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t pid;
int status;
pid = fork();
if (0 == pid)
{
printf("Hi, I'm child process!\n");
sleep(10);
}
else if (pid > 0)
{
printf("Send signal to child process (%d)\n", pid);
sleep(1);
kill(pid, SIGABRT);
wait(&status);
if (WIFSIGNALED(status))
{
printf("Child process received singal %d\n", WTERMSIG(status));
}
}
else
{
printf("Fork wrong!\n");
return 1;
}
return 0;
}
判断子进程退出状态的宏:
子进程的结束状态返回后存于status,底下有几个宏可判别结束情况
WIFEXITED(status)如果子进程正常结束则为非0值。
WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。
WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真
WTERMSIG(status)取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。
WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。
WSTOPSIG(status)取得引发子进程暂停的信号代码。
相关文章推荐
- linux c 父进程判断子进程退出状态
- 子进程system_service创建后while一直判断子进程状态是否died,如果会则zygote也kill自己
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- Linux:ps命令以及进程状态详解
- ubuntu (linux) 中的进程状态查询与管理 top/htop/ps/pgrep/kill
- 判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)
- linux 查看端口号 以及进程的状态
- 信号退出【Linux学习笔记】kill及kill -9的用法及如何实现进程的优雅退出
- wait & waitpid 以及子进程传给父进程的信号分析
- 我使用过的Linux命令之kill - 终止进程/发送信号
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- linux 父进程被kill掉后子进程的状态
- 信号退出【Linux学习笔记】kill及kill -9的用法及如何实现进程的优雅退出
- linux kill 命令 以及 USR1 信号 解释
- Linux下父进程通过管道发送文件名给子进程,子进程获取文件名后首先判断文件是否存在,不存在,通过管道返回错误信息,存在,将文件内容返回给父进程
- Linux下对后台进程通过kill传递信号不起作用的问题
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- 【转载】linux杀死进程以及发送或响应信号
- Linux间的进程通信;以及子进程的创建
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)