繁体   English   中英

在linux中监控和杀死其他程序停滞过程的更好方法是什么?

[英]Better way to monitor and kill other program's stalled process in linux?

我需要我的程序来运行其他程序,但如果其他程序在一段时间内没有返回,我需要杀死它。 我提出了以下似乎有效的解决方案。

int main()
{
int retval, timeout=10;
pid_t proc1=fork();

if(proc1>0)
{
    while(timeout)
    {
        waitpid(proc1, &retval, WNOHANG);
        if(WIFEXITED(retval)) break; //normal termination
        sleep(1);
        --timeout;
        if(timeout==0)
        {
            printf("attempt to kill process\n");
            kill(proc1, SIGTERM);
            break;
        }
    }
}
else if(proc1==0)
{
    execlp("./someprogram", "./someprogram", "-a", "-b", NULL);
}
//else if fork failed etc.
return 0;
}

我需要我的程序尽可能健壮,但我不熟悉linux下的编程,所以我可能不知道它可能存在的问题。 我的问题是:1。这是解决这一特定问题的正确方法,还是有更好的方法? 2.有没有人看到可能导致意外行为或系统资源泄漏的问题或错误?

(WIFEXITED(retval))如果程序被信号杀死(包括因分段违规而导致崩溃(WIFEXITED(retval))(WIFEXITED(retval))将不会返回true。

可能最好只检查waitpid的成功返回。 只有在程序终止时(无论是否自愿),才会发生这种情况。

取决于确保流程消失的重要性......
SIGTERM杀死进程后,你可以再睡一秒左右,如果它还没有消失,请使用SIGKILL来确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM