터미널 정지 시 프로세스가 종료되지 않도록 설정하는 방법

터미널 정지 시 프로세스가 종료되지 않도록 설정하는 방법

[편집하다]

간단하게.

java xxx...머신 A에서 퍼티 호출을 사용하여 머신 B에서 연결하고 있습니다 . 하지만 B 기계에는 접근할 수 없습니다. java xxx...머신 B가 종료될 때 종료될 수 없는 실행 중인 프로세스를 설정하기 위해 머신 C에서 머신 A에 어떻게 연결합니까 ?

[원래]

나는 퍼티를 사용하여 서버(머신 A)에 연결하고 있으며 그 서버에서 프로세스가 실행되고 있습니다. 하지만 컴퓨터(컴퓨터 B)를 다시 시작해야 하므로 연결과 퍼티가 끊어질 수 있습니다. 실행 중인 프로세스에 nohup을 설정하지 않았기 때문에 이 프로세스가 종료될 수 있습니다. disown어떤 이유로 퍼티를 사용하여 설정할 수 없습니다. 그래서 저는 머신 C를 사용하여 서버(머신 A)에 대한 퍼티 연결을 열고, 머신 B가 다시 시작될 때 프로세스가 종료되지 않도록 실행 중인 프로세스를 설정하고 싶습니다.

이를 수행할 수 있는 방법이 있습니까? disown내가 사용할 수 있는 것과 동일한 쉘 프로세스를 사용하는지 알고 있습니다 . 하지만 더 이상은 그렇지 않습니다.

답변1

프로세스가 SIGHUP 신호를 무시하도록 디버거를 연결할 수 있습니다.

gdb --pid="$pid" --batch -ex 'call signal(1,1)' -ex detach

( $pid프로세스의 ID는 어디에 있습니까?) 이것을 확장하여 stdout/stdin/stderr을 리디렉션할 수도 있습니다. 그러나 프로세스를 다른 터미널에 다시 연결하는 방법에 대해 여기에 언급된 다른 질문도 확인할 수 있습니다.reptyr이 사이트 검색).

또 다른 옵션은 Java 프로세스를 제어하는 ​​의사 터미널을 할당하고 구동하는 프로세스를 일시 중지하는 것입니다. 이렇게 하면 ssh 연결이 종료되더라도 죽지 않고, java가 터미널에 너무 많이 쓰지 않는 한 영향을 받지 않습니다.

이는 프로세스 테스트입니다 sleep.

$ pstree -sp "$(pidof sleep)"
init(1)───sshd(5701)───sshd(62826)───sleep(62842)
$ kill -s STOP 62826

sleep이제 실행 중인 SSH 클라이언트를 종료합니다 .

$ ps -fC sleep
UID        PID  PPID  C STIME TTY          TIME CMD
root     62842 62826  0 09:50 pts/8    00:00:00 sleep 100

sshdJava 프로세스가 종료되면 완전히 종료될 수 있도록 프로세스를 다시 시작해야 합니다.

답변2

kill 명령에 기회를 주고 특정 신호를 제공하고 싶지만 아직 이 작업을 수행하는 데 적합한 신호를 찾지 못했습니다. 내장된 기능으로는 이 작업을 수행할 수 없다고 말하고 싶습니다. 그러나 누군가가 다음과 같은 코드를 작성했습니다.

실행 중인 프로세스를 거부하고 이를 새 화면 셸에 연결하는 방법은 무엇입니까?

답변3

귀하의 경우 가장 좋은 방법은 사용하는 것입니다tmux또는screen

사용 방법에 대한 예는 다음과 같습니다. tmux화면은 거의 동일합니다.

  1. 서버에 퍼티 추가
  2. 선호하는 패키지 관리자를 사용하여 tmux를 설치하세요.
  3. 다음을 사용하여 새 tmux 세션을 시작하십시오.tmux
  4. 예를 들어 tmux 창에서 애플리케이션을 실행합니다.java -jar blah blah
  5. 다음을 눌러 tmux 세션을 분리하세요.CTRL-B D
  6. 다음에 Java 프로세스를 확인하려는 경우(동일한 Putty 창 또는 다른 시스템의 Putty에서):tmux atta

답변4

명령을 실행할 준비가 되었기 때문에 명령을 눌러야 CTRL-Z정지 상태가 되고 프로그램은 실행되지 않지만 프로그램 상태는 저장되어 언제든지 다시 시작할 수 있습니다.

명령을 실행하여 프로그램에 어떤 작업 ID가 있는지 확인할 수 있습니다 jobs. 일단 식별하면 그렇게 할 수 있습니다. bg %your_prog_id프로그램을 백그라운드로 보내면 세션을 닫아도 계속 실행됩니다. 이제 종료하면 프로그램이 계속 실행됩니다.

관련 정보