Ubuntu

為什麼特定 C# 映像的 Ubuntu 16.04 執行程序在 90 秒後停止,而其他程序則 24X7 執行?

  • May 31, 2016

我想找一個類似於 strace 的 Ubuntu Linux 16.04 systen 命令來找出我的 C++ 程序 ServiceController.exe 的原因

[execle  ("/usr/lib/mono/4.5/mono-service","/usr/lib/mono/4.5/mono-service",
        "./Debug/ComputationalImageClientServer.exe", 
         0, char const* EnvironmentPtr)]

90 秒後神秘地停止執行 * 其中 * ComputationalImageClientServer.exe 和 ComputationalImageClientServer.exe 是 C#/.NET 4.5 執行檔

In contrast, when I run /usr/lib/mono/4.5/mono-service.exe  ./Debug/ComputatationalImageVideoServer.exe" at the command prompt,

它至少 7 天連續執行 24 小時。

為什麼第一個範例不能 24X7 連續執行?如何診斷、調試和修復此錯誤?

open("Delaware_Client_Server.exe", O_RDONLY) = 3
pipe2([4, 5], O_CLOEXEC)                = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f743e4dca10) = 3509
close(5)                                = 0
fcntl(4, F_SETFD, 0)                    = 0
fstat(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(4, "", 4096)                       = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3509, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
close(4)                                = 0
wait4(3509, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 3509
write(1, "\n", 1)                       = 1
write(1, "Process returned 256\n", 21)  = 21

使用 GNU 調試器、gdb 或類似的東西。

將程序作為守護程序執行和使用“&”將其分叉到後台有什麼區別?

表示 SIGHUP 可能是導致 ServiceController.exe 在 90 秒後停止執行的罪魁禍首。nohup 命令 & 防止這種情況發生。

使用命令 & 當父程序死亡時,您的程序將被 SIGHUP 信號殺死。

不過,系統管理員可以使用一些變通方法。

在 bash 系統上,您可以使用: (trap ’’ HUP; command) &

這將打開一個子shell,用一個空的處理程序擷取 HUP 信號,然後將其與 & 符號/分叉。

輸出可能仍會被重定向到錯誤的 tty。或者迷路。您可以使用 &>command.out、1>output.out 或 2>errors.out 來解決此問題

在大多數係統上,您可能還可以訪問 nohup 命令。nohup 大大簡化了這個過程。這是相當標準的,但我發現許多busybox嵌入式ARM發行版都缺少它。你只要寫: nohup 命令 &

..你完成了。輸出被重定向,IIRC,到 nohup.out,但是這個文件名可以用一個選項來改變。

引用自:https://unix.stackexchange.com/questions/286080