내 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,
하루 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)되지만 이 파일 이름은 옵션을 사용하여 변경할 수 있습니다.