Ubuntu
為什麼特定 C# 映像的 Ubuntu 16.04 執行程序在 90 秒後停止,而其他程序則 24X7 執行?
我想找一個類似於 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,但是這個文件名可以用一個選項來改變。