답변:
귀하의 작업이 이미 시작된 경우, 너무 늦기 *
다른 솔루션을 고려하는 것이 당신의 사이에 추가 계층 삽입 ssh
세션 쉘이 명령을 실행 같은 screen
, tmux
, byobu
, nohup
및 좋아.
프로세스 지원이 배경에 배치하고, 특히 끊지 않으면 stdout
및 stderr
폐쇄 / 쓰기가 불가능하고, 당신은으로 로그 아웃하기 전에 배경에 넣을 수 있습니다 ControlZ및 bg
다음과 쉘에서 분리 disown
내장.
예 :
$ ssh localhost
You have new mail.
Last login: Fri Jun 6 11:26:56 2014
$ /bin/sleep 3600
^Z[1] + Stopped /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] + Running /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864 1 0 21:12 ? 00:00:00 /bin/sleep 3600
jlliagre 13056 12477 0 21:13 pts/18 00:00:00 grep sleep
$
*
Bob이 언급했듯이 Linux에서 tty 세션을 다시 보호하는 몇 가지 해킹 방법이 있습니다. repty, retty , injcode 및 neercs 입니다. 가장 고급 스러운 모습은 pptyr 이지만 ptrace가 프로세스를 해킹하려면 루트 권한이 필요할 수 있습니다.
disown
명령으로 프로세스 ID를 제공 했어야한다고 생각한다
bg
답장의 첫 부분에서 명령이 필요한지 확실하지 않았습니다. 편집했습니다.
kill -CONT
거의 같은 프로세스를 다시 실행할 수 있습니다.
한 가지 해결책은 GNU screen 을 사용하는 것 입니다. 시작하고 screen
명령을 실행 한 다음로 분리 할 수 C-a d
있습니다. 나중에 다시 연결하려면를하고 screen -r
이전 세션으로 돌아갑니다.
화면의 다른 이점은 창 관리 (새 SSH 연결없이 명령이 실행되는 동안 다른 쉘로 전환 할 수 있음)이며 현재 세션이든 이후 세션이든 명령이 포 그라운드로 유지되도록합니다.
편집 : 주석에서 언급했듯이 screen
명령을 실행하기 전에 시작 해야하는 경우에만 작동합니다 . 명령이 이미 실행 중이면 @jlliagre의 솔루션이 필요합니다.
tmux
같은 다른 프로그램 screen
은 현재 SSH 연결에 묶여 있지 않은 원격 세션을 가질 수 있습니다.
screen
.
screen
거나 tmux
.)
이를위한 "표준"방법 중 하나는 다음 과 같은 nohup
명령 을 사용하는 coreutils
것입니다.
nohup COMMAND [ARGS] &
그러나이 명령은 프로그램 의 출력 ( STDOUT
& STDERR
AFAIK)을 파일로 리디렉션하여 nohup.out
때로는 큰 로그 파일 생성과 같이 때로는 성가 시므로 직접 리디렉션하거나 / dev / null로 리디렉션 할 수 있습니다 네가 원한다면.
nohup
이것을 사용할 수 있습니다. 실행중인 프로세스를 일시 중단하고 백그라운드로 보내면 ( Ctrl
+ Z
및 실행 bg
) 발행 할 수 있습니다 nohup %1
.
뿐만 아니라 nohup
당신 "&"사용하고 서브 쉘 백그라운드에서 프로세스를 시작할 수 있습니다 :
&로 명령 접미사를 괄호로 묶습니다.
$ (thecommand args &)
프로세스가 pid 1922를 얻는다고 가정 해 봅시다.
$ ps -f
UID PID PPID C STIME TTY TIME CMD
usr 11473 2643 0 15:07 pts/1 00:00:00 bash
usr 11922 1 0 15:11 pts/1 00:00:00 thecommand
그것이 원래 부모 인 쉘 프로세스 11473에서 연결되지 않은 것을보십시오. 따라서 현재 셸 (11473)을 종료하거나 종료하면 프로세스 11922가 계속 실행되며 pt와 연결이 끊어집니다.
쉘을 종료하고 새 쉘을 입력하십시오. 이 쉘이 동일한 pt에 연결되어 있어도 pts없이 프로세스를 볼 수 있습니다.
$ ps -fp 11922
UID PID PPID C STIME TTY TIME CMD
usr 11922 1 0 15:11 ? 00:00:00 thecommand
Posix에서 어떻게 호출되거나 문서화되는지는 아니지만 1990 년부터 bsh, ksh 및 bash 에서이 방법을 사용합니다.
마지막으로 bg
내장 쉘 명령을 .
프로그램을 시작하기 만하면 프로그램을 일시 중지하거나 백그라운드로 유지하려면 CTRL + Z를 입력하십시오.
$ thecommand
^Z
[1] Stopped thecommand
이제 백그라운드에서 계속 실행하십시오.
$ bg
[1]+ thecommand &
프로세스 정보를 살펴보면 아직 부모 프로세스가 있습니다.
$ ps -f
UID PID PPID C STIME TTY TIME CMD
usr 12046 2643 0 15:18 pts/6 00:00:00 bash
usr 12571 12046 0 16:00 pts/6 00:00:00 thecommand
usr 12601 12046 0 16:04 pts/6 00:00:00 ps -f
따라서 현재 프로세스를 종료하십시오. 백그라운드에서 실행중인 프로세스는 원래 상위에서 연결 해제되고 백그라운드에서 계속 실행됩니다.
$ exit
다시 로그인하고 프로세스 정보를보십시오 :
$ ps -f 12571
UID PID PPID C STIME TTY TIME CMD
usr 12571 1 0 16:00 ? 00:00:00 thecommand
disown
명령 을 수행했습니다 . bash : warning : 프로세스 그룹 24876에서 중지 된 작업 1을 삭제하는 중입니다. 이제 내 작업이 나열ps -all
되었지만 작동하지 않는 것 같습니다 (CPU 사용량은 0 % 임)