【发布时间】:2014-07-16 06:36:26
【问题描述】:
我在 ubuntu 中使用 c++ 创建了一个二进制文件,它将作为守护进程运行并从数据库中读取数据并将其存储到一个 xml 文件中。
为了停止守护进程,我正在使用此功能,但它不起作用。
void stopService()
{
int mypid;
if(((mypid = validate_pid()) > 0) || ((mypid = validate_non_pid()) > 0)) {
if(0 == kill(mypid, SIGTERM) ) {
sleep(1);
}
else {
printf("Stopping %s [FAILED]\n", Service);// this line is getting printed.
}
}
else {
printf("Stopping %s [ Failed ] Not Running....\n", Service);
}
}
我得到的输出是停止服务[失败]。
'validate_pid()' It will written the pid from /proc/some id/cmdline.
和 'validate_non_pid()' 它将使用 pgrep 写入 pid。
我没有写完整的代码,因为它会变得很长,
提前致谢。
还有一件事,我通过获取命令行参数并在 switch() 中使用它来调用这个函数; '案例'e': 停止服务();'
那么我怎样才能通过使用 kill() 来杀死这个进程。
【问题讨论】:
-
您可以查看
errno了解失败的原因。可能是权限问题。 -
我已经打印了 pid 并从终端手动终止了进程但是使用 sudo,没有 sudo 它给了我一个错误,说'kill: (9315) - Operation not allowed'。
-
尝试将 kill() 替换为 'int raise(int)' + 'void (*signal(int, void (*func)(int)))(int);'
标签: c++ c process kill-process