2011-05-09 4 views
5

주어진 터미널에서 Linux에서 중지 된 프로세스가 있습니다. 이제 나는 다른 터미널에있다. 어떻게 그 과정을 시작해야합니까? 내가 죽일 신호는 무엇일까. 나는 그 과정을 소유하고있다.Linux에서 중지 된 프로세스를 시작하는 방법

+0

http://unix.stackexchange.com에 속합니다. – hammar

답변

8

kill -CONT pid를 실행할 수 있습니다. 다른 터미널 세션이 아직있는 한 원하는대로 작동합니다. 다른 세션이 작동하지 않으면 출력을 넣을 위치가 없을 수도 있습니다.

+0

+1 정확한 응답을 제 자리에 제공하기 위해 지나치게 성급한, 틀린 하나! – idz

+0

나는 이것을 시험 할 것이다. 감사. – abc

4

@ Dave의 답변 외에도 GDB를 사용하여 실행중인 프로그램의 입력 및 출력 파일 설명자를 리디렉션하는 advanced method이 있습니다.

PID 4711으로 임의의 쉘 스크립트 FreeBSD의 예 :

> gdb /bin/sh 4711 
... 
Attaching to program: /bin/sh, process 4711 
... 
(gdb) p close(1) 
$1 = 0 
(gdb) p creat("/tmp/testout.txt",0644) 
$2 = 1 
(gdb) p close(2) 
$3 = 0 
(gdb) p dup2(1,2) 
$4 = 2 

EDIT - 설명 : 후 재사용하는 파일을 1 파일 핸들 열리고이 닫힐 1. 그럼 핸들 (2 개)과 중복 닫히고 파일 핸들 1에서 2까지.

이제이 프로세스 'stdoutstderr은 표시된 파일로 이동하고 거기에서 읽을 수 있습니다. stdin이 필요한 경우 p close(0)을 입력 한 다음 입력 파일 또는 PIPE 또는 smth를 첨부해야합니다.

당분간은 제어 터미널에서이 프로세스를 원격으로 수행 할 방법을 찾을 수 없습니다. 즉, 터미널이 종료 될 때이 프로세스는 SIGHUP 신호를 수신합니다.

참고 : 다른 터미널에/액세스 권한이있는 경우 disown -a을 입력하면 터미널이 닫힌 후에도이 프로세스가 계속 실행될 수 있습니다.

+0

멋진 기술입니다. 디버거를 사용하여 STDOUT을 다시 라우팅 할 생각은 없었습니다. –

관련 문제