【问题标题】:Process management in C++C++ 中的进程管理
【发布时间】:2015-09-29 07:50:04
【问题描述】:

我正在用 C 语言开发我的应用程序,当应用程序启动时,它需要终止从系统启动时运行的 shell 脚本。

这是我从 C++ 中杀死 shell 脚本的函数:

void Kill_Script_sh(void)
{
    FILE *fp;
    char buffer[30];
    char pid_number[5];
    int pid;
    int fd;
    std::stringstream command;

    command.str("");
    fp = popen("ps aux | grep tick.sh", "r");

    fgets(buffer, 30, fp);

    pclose(fp);

    pid_number[0] = buffer[11];
    pid_number[1] = buffer[12];
    pid_number[2] = buffer[13];
    pid_number[3] = buffer[14];
    pid_number[4] = buffer[15];


    pid = atoi(pid_number);

    printf("%d \n", pid);

    command << "sudo kill " << pid;

    system(command.str().c_str());
}

杀死进程后,我需要检查它是否仍然存在。这是做我需要的正确方法吗?任何想法都是有帮助的。谢谢

【问题讨论】:

  • 那不是 C,那是 C++。
  • 你试过你的ps命令行了吗?很有可能您的 grep 也匹配,导致您杀死 grep 而不是脚本。
  • @molbdnilo 它是混合的。
  • @Zola 没有这样的东西。这是一个或另一个。
  • @molbdnilo 有,因为这是嵌入式系统的应用,用g++编译,一切正常。

标签: c++ bash process debian


【解决方案1】:

杀死它(或一般情况下)后,您可以使用kill -0 [pid] 检查进程是否存在。

【讨论】:

  • 您的答案仅对“一般”的情况是正确的,因为您无法安全地执行此操作,因为很可能已经用这个 PID 生成了另一个进程而“原始”过程结束。
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2016-07-27
相关资源
最近更新 更多