您的位置:首页 > 其它

iPhone开发之-kill(pid_t pid, int sig) 的用法

2014-03-25 10:10 148 查看
kill 主要用来杀死某个进程.

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;

}

.......

}

}

很好用 不是吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: