在进程bin文件运行时替换它

时间:2018-03-30 07:30:50

标签: linux

我有一个正在运行的服务器程序(由g ++编译)。我改变了一些代码并编译了一个新的bin文件。如果没有杀死正在运行的进程,我会使用新创建的bin来覆盖旧的bin。

过了一会儿,服务器进程崩溃了。剂量与我的替换行为有关吗?

我的服务器是一个多线程高并发服务器。一次崩溃是段错误,另一次是死锁。 我打印核心转储文件中的所有参数,并将它们完全相同地传递给崩溃的函数。但没关系。

我仔细观察死锁核心转储中的所有线程信息,我发现它不可能导致死锁。

所以我怀疑替换会导致奇怪的事情

根据这个question,如果发生交换行为,它确实会产生奇怪的事情

2 个答案:

答案 0 :(得分:1)

对于简单的标准程序,即使当前正在运行的进程打开它,移动新文件也会首先取消原始文件的链接,原始文件将保持不变。

但是对于长时间运行的服务器,可能会发生很多事情:有些分叉新进程,偶尔有些甚至可以执行新的版本。在这种情况下,您可以并排运行不同的版本,根据更改的不同,可以支持或不支持。

换句话说,如果没有关于什么是服务器程序,运行方式以及更改内容的更多信息,我可以给出的唯一答案是也许

答案 1 :(得分:0)

如果您可以确保仅删除bin文件,并且bin文件不被任何其他进程(例如某个守护程序)使用。然后它与你的替换行动没有关系。