私のC ++プログラムServiceController.exeが何であるかを知るために、straceに似たUbuntu Linux 16.04 systenコマンドを探したいと思います。
[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,
1日24時間、週7日以上営業しています。
最初の例が年中無休で継続的に実行されないのはなぜですか?このエラーを診断、デバッグ、および修正するにはどうすればよいですか?
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
答え1
GNUデバッガ、gdbなどのツールを使用してください。
答え2
プログラムをデーモンとして実行することと「&」を使用してバックグラウンドに分岐することの違いは何ですか?
SIGHUPがServiceController.exeの実行を90秒後に停止させる原因である可能性があることを示します。 nohupコマンドは、&これが発生するのを防ぎます。
& コマンドを使用します。親プロセスが終了すると、プロセスはSIGHUP信号によって終了します。
ただし、システム管理者が使用できるいくつかの回避策があります。
Bashシステムでは、次のものを使用できます。(trap '' HUP;コマンド)&
これにより、空のハンドラでHUP信号を取り込み、アンパサンド/フォークするサブシェルが開きます。
出力がまだ間違ったttyにリダイレクトされる可能性があります。または迷子になったり。 &>command.out、1>output.out、または2>errors.outを使用してこの問題を解決できます。
ほとんどのシステムでは、nohupコマンドにアクセスすることもできます。 nohupはこのプロセスを大幅に簡素化します。これはかなり標準的ですが、多くのビジボックス内蔵ARMディストリビューションではこの機能がありません。次のように書くだけです:nohupコマンド&
..終わりました。出力はnohup.outにリダイレクト(IIRC)されますが、このファイル名はオプションを使用して変更できます。