exec -a를 사용하여 프로세스 이름을 지정하지만 CTRL-C의 영향을 받지 않고 백그라운드에서 실행합니다.

exec -a를 사용하여 프로세스 이름을 지정하지만 CTRL-C의 영향을 받지 않고 백그라운드에서 실행합니다.

bash 스크립트에서 백그라운드 프로세스를 시작하고 싶지만 다른 이름을 지정하고 CTRL- 에 면역되도록 만들고 싶습니다 C. 나는 다음을 시도했다:

exec -a NiceName java -cp ....long java command line &
tail -f logs/the.log

exec프로세스 에 java.

SIGINT가 종료되는 프로세스에 전달되므로 CTRL-stop Cscript/tail을 누를 때까지 작동합니다 .java

나는 또한 (exec ...&) 및 의 조합을 시도했습니다 (exec ...)&. 작동하는 것은 무엇입니까

exec bash -c "java command line escaping hell&"
tail -f logs/the.log

하지만 지옥에서 벗어나지 않을 방법이 있었으면 좋겠어요. 나는 또한 성공하지 못한 채 몇 가지를 시도했습니다 disown.

을 제거하면 exec하위 프로세스는 CTRL- 의 영향을 받지 않지만 C이름을 지정할 수는 없습니다.

답변1

좀 더 실험한 후에 다음과 같은 방법을 찾았습니다.

(trap "" SIGINT; exec -a NiceName java -cp ....long java command line &)
tail -f logs/the.log

SIGINT서브쉘 무시는 execed 명령에 의해 java상속 됩니다. 전경에서 실행 bash/ tail계속 CTRL-C를 사용하여 종료할 수 있습니다.

관련 정보