kill(pid_t pit, int signo)函数特别的用法

 

kill函数的定义和原型如下:
int kill(pid_t pid, int sig);
使用时要引入如下的两个头文件:
#include <sys/types.h>
#include <signal.h>
参数说明:
pid:可能选择有以下四种:
1. pid大于零时,pid是信号欲送往的进程的标识。
2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。
3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。
4. pid小于-1时,信号将送往以-pid为组标识的进程。


返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EINVAL:指定的信号码无效
EPERM;没有给任何目标进程发送信号的权限
ESRCH:目标进程或进程组不存在

 

上面的函数定义很简单,不用过多解释, 前段时间在业务上需要得到一个进程是是不是还在running,还是stop 掉了, 如果是stop了, 那么就要重启启动这个进程。man 了一把, 原来kill函数还可以来查进程的基本状态

 

const pid_t invaild_process_id = -1;

 

 

typedef enum

{

process_running = 0,

        process_stoped

}process_state; // 基本状态定义

 

typedef _process

{

pid_t                    pid;

        char                     *pro_name;

        process_state     stat;

        uint32_t               handle_count; //打开文件数

        uint32_t               thread_count; //含有线程数

        struct timeval       sys_time; //内核用掉的时间

        struct timeval       user_time; //用户时间

        struct timeval       total_time; //用掉的总时间

        uint32_t               memory_size; //用掉的内存数

        uint32_t               virtual_size; //用掉的虚拟内存数

        queue_t               *thread_queue; // 线程队列

        uint32_t               process_priority          //进程的优先级

}process_t;

 

 

.......// 前面业务处理

 

process_state check_process_state(process_t *process)

{

if(process->pid == invaild_process_id)

{

return process_stoped;

}

// 当kill的第2个参数是0的时候, 其实0的signo是不存在的, 这个函数会替我们“检查” 该进程是否还在运行

// 如果返回是0, 说明该进程还在run, 如果返回-1,如果你确定该进程id是存在的, 那么说明它已经stop掉了, 也就是说down // 掉了,记住, 进程不会被杀掉, 因为signo 不存在

switch(kill(process->pid, 0)){

case 0 :

return process_running;

case -1:

if(errno == ESRCH)

{

return process_stoped;

}

.......

}

}

 

 

很好用 不是吗?

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值