화면을 먼저 실행하지 않고 자식을 죽이지 않고 어떻게 터미널을 닫을 수 있습니까?


35

때로는 그놈 터미널에서 앱을 실행하지만 갑자기 그놈이나 무언가를 다시 시작해야합니다. 질문에 대한 답변도 유용하다고 생각되면 무언가 일어나고있는 SSH에서 연결을 끊고 싶습니다.

그놈의 터미널 트리는 다음과 같습니다 :

gnome-terminal
    bash
        some-boring-process

캔 I '분리' bash에서 gnome-terminal(또는 분리 some-boring-process의 출력 곳 bash가 및 리디렉션)? 난 그냥 죽일 경우 gnome-terminal, bash모든 서브 프로세스를 뜻 살해됩니다


답변:


48

some-boring-process현재 bash 세션에서 실행중인 경우 :

  1. ctrl-z당신에게 bash 프롬프트를 제공하기 위해 그것을 중단
  2. 와 배경에 넣어 bg
  3. 작업 번호를 기록하거나 jobs명령을 사용하십시오.
  4. 이 bash 세션에서 프로세스를 분리하십시오 disown -h %1(실제 작업 번호를 대체하십시오).

그것은 출력을 리디렉션하기 위해 아무것도하지 않습니다-당신은 지루한 프로세스를 시작할 때 그것을 생각해야합니다. [편집] https://gist.github.com/782263 를 리디렉션하는 방법이있는 것 같습니다

그러나 진지하게 화면을 들여다보십시오. 몇 달 동안 실행 된 원격 서버에 쉘이 있습니다.


고맙습니다. 질문에 대답하는 유일한 사람이기 때문에 답변을 선택했습니다 ( 이미 프로세스 실행 에 관한 것입니다). 이미 사용하고 screen그것의 문제가 있지만, 때때로 나는 그것을 사용하지 않는 모든 내 인생에서 bash는 세션
valya

모든 bash 세션에는 사용하지 않지만 많은 시간을 보내는 모든 원격 시스템에 사용하십시오.
glenn jackman

출력 리디렉션에 대한 정보를 추가 할 자유를 얻었습니다. 검토하십시오!
valya

[root @ server ~] # bg -bash : bg : 현재 : 해당 직업 없음
Muhammad Dyas Yaskur

내가 왜 bash: bg: current: no such job?
Muhammad Dyas Yaskur

10

이것은 정확히 스크린tmux 가 만들어진 것입니다. screen / tmux 세션 내에서 쉘을 실행하면 마음대로 연결을 끊거나 다시 연결할 수 있습니다. 하나의 gnome-terminal 내에서 여러 개의 셸 세션을 실행할 수도 있습니다.


고맙지 만, 내가 받아 들인 대답에 댓글을 달았을 때 : 1. 이미 실행중인 프로세스에 관한 질문이었습니다. 2. screen문제가 있고 내 인생의 모든 배쉬 세션에 그것을 사용하고 싶지 않다
valya

6

screen, tmux또는 dtach(아마도와 함께 dvtm)이 모두 훌륭하지만, 그중 하나를 사용하지 않았다고 생각되는 경우 활용할 수 있습니다 nohup.


고맙지 만, 내가 받아 들인 대답에 댓글을 달았을 때 : 1. 이미 실행중인 프로세스에 관한 질문이었습니다. 2. screen문제가 있고 내 인생의 모든 배쉬 세션에 그것을 사용하고 싶지 않다
valya

@valya 기쁜 해결책을 찾았습니다. 그러나 분명히하기 nohup위해 -p옵션 을 사용하여 실행중인 프로세스에서 작동합니다 (가능한 경우).
행크 게이

@Hank Gay : 맨 페이지에서 -p옵션을 볼 수 없습니다 nohup. 어떤 시스템을 사용하고 있습니까?
Mikel

@Mikel 걱정을 멈추고 사랑하는 법을 배우기 전에 Solaris 상자 tmux에서 -p옵션을 사용했습니다 . 나는 또한 잡종 CentOS 상자에서 그것을하는 것에 대한 모호한 기억을 가지고 있지만 (아마도 zsh그것을 지원하는 내장 기능이 있습니까?) 어떤 문서도 찾을 수 없습니다.
행크 게이

@Hank Gay : 우분투 리눅스 시스템도 제공 하지 bash않습니다 . zshnohup
Mikel

4

자식 프로세스를 배경 화하고 계속 진행하는 것이 아니라 자식 프로세스와 계속 상호 작용하려면 프로세스를 현재 tty에서 "스틸 링"하고 프로세스에 다시 첨부하는 개념 증명 인 retty 라는 프로그램 이 있습니다. 현재 하나.

그러나 일부 어셈블리 코드를 다시 연결된 응용 프로그램의 스택에 붙이는 것을 포함하여 몇 가지 끔찍한 일을합니다. 그리고이 코드는 x86_64 용으로 업데이트되지 않았습니다.

아마도 사용자 공간의 프로세스를 파일로 동결하여 나중에 복원 할 수있는 다른 프로그램이있을 수 있습니다 (다른 tty에서 가능할 수도 있습니다). 이것은 cryopid 이며 프로젝트도 중단되었습니다. 개념 증명 단계이며 최신 Linux에서는 코드가 작동하지 않습니다. 아 잘

이것이 완성을 위해 여기에 있어야한다고 생각했습니다. 당신이 끔찍한 부두에 의지하지 않는다면, 이것은 적어도 이론적 인 가능성입니다.


1
그것은 나에게 gist.github.com/782263 를 생각 나게한다 ... 아, 그 요지는 내 질문에도 답하는 것 같다
valya

2

시스템 재부팅이 얼마 남지 않더라도 끝내고 ​​싶은 것을 nohup실행하면 백그라운드에서 사용 하고 실행합니다. 화면 등과 달리 프로세스에 다시 연결할 수 없습니다. 그러나 다른 곳에서 출력을 금지하면에서 찾을 수 있습니다 nohup.out.

screen프로세스를 위해 터미널을 전환하고 싶을 때 사용 합니다. 가정 / 직장에서 프로세스를 시작하고 다른 프로세스로 전환하는 등. 다른 터미널 세션 출력과 마찬가지로 결국 버퍼 상단에서 스크롤됩니다.

편집 : 이미 프로세스를 시작한 경우 프로세스가 닫힐 때 신호가 전송 disown되지 않도록 HUP프로세스를 진행할 수 있습니다.


고맙지 만, 내가 받아 들인 대답에 댓글을 달았을 때 : 1. 이미 실행중인 프로세스에 관한 질문이었습니다. 2. screen문제가 있고 내 인생의 모든 배쉬 세션에 그것을 사용하고 싶지 않다
valya

@valya 프로그램 그룹에서 실행중인 프로세스의 연결을 끊는 것에 대한 참조를 보았습니다. 그래도 도구를 모릅니다. 이 도구는 표준 IO 채널을 리디렉션해야 할 수도 있습니다. 나는 그것이 한 번 작동하도록 생각했을 수도 있지만 nohup이 더 간단하다고 결정했습니다.
BillThor

1

터미널 세션이 종료되면 프로세스 (PID)가 HUP 신호를받지 않도록 할 수 있습니다. 다음 명령을 사용하십시오.

nohup -p PID

nohup: invalid option -- 'p'. 어떤 nohup시스템에서 어떤 버전을 실행하고 있습니까?
Anthon

나는 주로 Solaris와 AIX를 사용합니다. Linux의 경우 disown 명령을 체크인해야합니다.
tony

예, -pLinux 에는 옵션이 없으므로이 답변은 Solaris 및 AIX 전용입니다. 알아두면 좋은 점
Sergiy Kolodyazhnyy

1

이 스크립트는 자식 프로세스를 부모 프로세스에서 분리하여 init 프로세스에 할당합니다 .

toDetach=$1

./$toDetach & # Runs the process - script on background

disown -h %$(jobs -l | grep $(ps -A | grep $toDetach | cut --delimiter=' ' -f1) | cut --delimiter=' ' -f1 | tr -d '[]+') # and then disowns it from parents process
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.