您好,我有一个用 C 语言编写的程序。程序中包括全局变量、数组、动态变量等等。当我向程序发送 SIGHUP 信号并在句柄中清理动态内存时,我想通过 HUP 重启程序。有没有办法在 C 语言中重新启动程序?我希望退出并从主函数返回,以便清理由主函数处理的静态数组的内存,然后重新开始执行主函数。
再次问候您。我编辑了信号句柄并在其中添加了 execv。在句柄中,我有两个函数。第一个是 clean_up(),用于清理动态数组;第二个是 execv()。发送 HUP 信号后,首先运行 clean_up(),然后是 execv()。但是不久之后,程序出现了段错误。如果不调用 clean_up() 函数,则程序可以正常工作。cleanup 存在问题吗?但是,例如终止信号等其他信号下,clean_up() 函数能够正常工作。
还有一个关于 execv() 的问题。它不会从主函数开始启动新程序吗?当我调用 execv() 时,它不会再次从主函数开始运行。
restart_process()
时要小心。根据POSIX.1标准,malloc
和execv
未定义为可重入函数,这意味着当您在信号处理程序中调用它们时可能会发生未定义的事情(例如内部数据结构损坏)。有关更多信息,您可以参考《UNIX环境高级编程》(W. Richard Stevens,Addison-Weseley,1999年第18版,第278页)。 - Andreas Florathexecve
前不通过其完整路径运行程序并执行chdir(SOME_OTHER_DIR_THAN_BEFORE)
,程序将无法工作。 - JJJ