5

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

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

还有一个关于 execv 的问题?它不是从 main 启动新程序吗?当我调用 execv 时,它不会再次从 main 启动

4

2 回答 2

8

由于您在 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;
}
于 2012-04-18T09:13:01.157 回答
1

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

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

于 2012-04-18T09:17:48.273 回答