我有一个正在运行的服务器程序(由g ++编译)。我改变了一些代码并编译了一个新的bin文件。如果没有杀死正在运行的进程,我会使用新创建的bin来覆盖旧的bin。
过了一会儿,服务器进程崩溃了。剂量与我的替换行为有关吗?
我的服务器是一个多线程高并发服务器。一次崩溃是段错误,另一次是死锁。 我打印核心转储文件中的所有参数,并将它们完全相同地传递给崩溃的函数。但没关系。
我仔细观察死锁核心转储中的所有线程信息,我发现它不可能导致死锁。
所以我怀疑替换会导致奇怪的事情
根据这个question,如果发生交换行为,它确实会产生奇怪的事情
答案 0 :(得分:1)
对于简单的标准程序,即使当前正在运行的进程打开它,移动新文件也会首先取消原始文件的链接,原始文件将保持不变。
但是对于长时间运行的服务器,可能会发生很多事情:有些分叉新进程,偶尔有些甚至可以执行新的版本。在这种情况下,您可以并排运行不同的版本,根据更改的不同,可以支持或不支持。
换句话说,如果没有关于什么是服务器程序,运行方式以及更改内容的更多信息,我可以给出的唯一答案是也许。
答案 1 :(得分:0)
如果您可以确保仅删除bin文件,并且bin文件不被任何其他进程(例如某个守护程序)使用。然后它与你的替换行动没有关系。