【问题标题】:kill() system call with SIGTERM is not working带有 SIGTERM 的 kill() 系统调用不起作用
【发布时间】: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


【解决方案1】:

这可能是权限问题。 使用

打印进程 ID
'getpid();'

从终端手动杀死它。

'sudo kill -9 processid'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多