在C中重新启动程序

时间:2012-04-18 09:05:55

标签: c linux signals kernel

您好我有一个用C编写的程序。我有全局变量,数组,动态变量以及数组等...我将SIGHUP发送到我的程序和处理程序中我清理动态内存。我想重启我的程序用HUP.IS有一种方法可以在c?中重启程序。我想退出并从main返回,以清理main中的静态数组处理的内存并重新启动main。

你好。我编辑了信号处理程序并在处理程序中添加了execv。在处理程序中我有2个功能。首先是clean_up();清理动态数组,第二个是execv()。发送HUP后,首先运行clean_up然后执行execv。但是经过一段时间后我就陷入了错误。但是,当我不调用clean_up函数时,它运行正常吗?清理有问题吗?但清理工作正常,其他信号,例如终止信号

还有execv的问题?。不是从主程序启动新程序吗?。当我调用execv时,它不会再从main启动

2 个答案:

答案 0 :(得分:7)

由于您使用的是Linux,我认为这是最简洁的方法:

int main(int argc, char **argv) {
    /* your program here */

    /* if you want to restart call this */
    if (execv(argv[0], argv)) {
        /* ERROR, handle this yourself */
    }

    return 0;
}

答案 1 :(得分:1)

我假设你正在使用某种形式的unix。对类似问题here有答案。该代码只是重新读取配置文件,这是人们期望在您叹息时发生的事情,而不是实际的重启。也就是说,如果要重新启动,只需用exec替换load_config()调用即可。有一些exec调用可供选择,因此请查看exec或execve的联机帮助页以选择您想要的那个。您将从父进程传递环境和argv指针,以便在执行时保留它们。

无论它值多少,如果您要重新启动程序并且可能只是重新初始化它,我真的不明白为什么要清理静态数组。