返回说明:
成功执行时,返回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;
}
.......
}
}
很好用 不是吗?