C程序旨在在Solaris中重新启动

时间:2013-07-15 03:30:45

标签: c unix solaris

My C程序在Solaris上运行,需要在发生某些情况时重新启动,例如接收信号。现在我考虑使用exec族函数来实现这个功能,并且有3个问题:

  1. 我知道文件描述符应该在执行前关闭,但程序使用一些第三方库,这些库也打开文件,那么如何关闭这些文件描述符呢?
  2. 除文件描述符外,是否需要释放任何系统资源?
  3. 除exec系列函数外,还有其他实现此功能的方法吗?

2 个答案:

答案 0 :(得分:4)

我会有2个程序......一个是第二个程序的启动程序。启动程序正在等待第二个程序的返回值,并根据该值决定是否重新启动它。

答案 1 :(得分:2)

POSIX spec for the exec family of functions告诉您应该担心的问题。仔细阅读DESCRIPTION部分,看看是否有任何重要事项(例如信号处理)。我不相信需要释放除文件描述符之外的任何资源。

无法关闭所有文件描述符 - 也无法设置其close-on-exec标志 - 除了知道它们是什么或循环遍历所有文件描述符之外。请参阅(例如)this answer

我同意另一个答案,更好的想法是让一个“观察者”进程或脚本在主程序终止时重新启动它。

[更新]

虽然没有标准(POSIX)方法来枚举和/或关闭所有打开的文件描述符,但是有一个特定于Solaris的接口可以执行此操作。 (这对我来说是新闻。)见下面的alanc's comment

相关问题