링크 ux 앞 배경 전환

1、& 기호. 명령 뒤에 하 나 를 더 하 다. & 기호
2、Jobs 명령 하 다. 이 명령 은 현재 배경 에서 실행 중인 명령 이 얼마나 되 는 지 볼 수 있 습 니 다. jobs 현재 셸 환경 에서 시 작 된 작업 상 태 를 보 여 줍 니 다. jobsid 가 지정 되 지 않 으 면 모든 작업 상태 정 보 를 표시 합 니 다.
3、fg 명령 하 다. 이 명령 은 배경 에서 실행 되 는 프로 세 스 를 프론트 로 옮 겨 실행 합 니 다. 구체 적 인 용법: fg %n.여기 N. jobs 보 이 는 jobnumber.
4、ctrl + z 조합 키 이 명령 은 프론트 데스크 에서 실행 중인 명령 을 백 스테이지 에 놓 고 일시 정지 합 니 다.
5. bg 명령 (background) 이 명령 은 배경 에서 실행 을 중단 하 는 명령 을 배경 에서 계속 실행 하 는 명령 으로 바 꿉 니 다.용법: bg% n. N jobs 명령 으로 보 이 는 jobnumber 입 니 다.
1. nohup
nohup 은 의심 할 여지없이 우리 가 먼저 생각 한 방법 이다.말 그대로 nohup 의 용 도 는 제출 한 명령 이 hangup 신 호 를 무시 하 게 하 는 것 이다.nohup 의 도움 정 보 를 먼저 살 펴 보 겠 습 니 다.
NOHUP(1)                        User Commands                        NOHUP(1)

NAME
       nohup - run a command immune to hangups, with output to a non-tty

SYNOPSIS
       nohup COMMAND [ARG]...
       nohup OPTION

DESCRIPTION
       Run COMMAND, ignoring hangup signals.

       --help display this help and exit

       --version
              output version information and exit

이 를 통 해 알 수 있 듯 이 nohup 의 사용 은 매우 편리 합 니 다. 처리 할 명령 전에 nohup 을 추가 하면 됩 니 다. 표준 출력 과 표준 오류 가 부족 하면 nohup. out 파일 로 재 설정 합 니 다.일반적으로 우 리 는 끝 에 '&' 를 추가 하여 명령 을 동시에 배경 에 넣 고 실행 할 수 있 으 며, 결 성 된 리 셋 파일 이름 을 변경 할 수도 있 습 니 다.
nohup 예제
[root@pvcent107 ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.com
root      3067   984  0 21:06 pts/3    00:00:00 grep 3059
[root@pvcent107 ~]#

2.setsid
nohup 은 HUP 신 호 를 무시 함으로써 프로 세 스 가 중간 에 중단 되 는 것 을 피 할 수 있 습 니 다. 그러나 우리 가 각 도 를 바 꾸 어 생각하면 HUP 신 호 를 받 는 터미널 의 하위 프로 세 스 에 속 하지 않 는 다 면 자 연 스 럽 게 HUP 신호 에 영향 을 받 지 않 을 것 입 니 다.setsid 는 우리 가 이 점 을 할 수 있 도록 도와 줄 수 있다.setsid 의 도움말 정 보 를 먼저 살 펴 보 겠 습 니 다.
SETSID(8)                 Linux Programmer’s Manual                 SETSID(8)

NAME
       setsid - run a program in a new session

SYNOPSIS
       setsid program [ arg ... ]

DESCRIPTION
       setsid runs a program in a new session.

이 를 통 해 알 수 있 듯 이 setsid 의 사용 도 매우 편리 하고 처리 할 명령 전에 setsid 를 추가 하면 됩 니 다.
setsid 예제
[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     31094     1  0 07:28 ?        00:00:00 ping www.ibm.com
root     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

주의해 야 할 것 은, 이전 예 에서 우리 의 프로 세 스 ID (PID) 는 31094 이 고, 부모 ID (PPID) 는 1 (즉 init 프로 세 스 ID) 이 며, 현재 터미널 의 프로 세 스 ID 가 아 닙 니 다.이 예 를 nohup 예 에서 부모 ID 와 비교 하 십시오.
3.&
여기에 subshell 에 관 한 작은 기교 가 하나 더 있다.하나 이상 의 이름 을 '()' 에 포함 시 키 면 이 명령 들 이 하위 셸 에서 실 행 될 수 있 고 재 미 있 는 기능 을 많이 확장 할 수 있다 는 것 을 알 고 있 습 니 다. 우리 가 지금 토론 하고 자 하 는 것 은 그 중의 하나 입 니 다.
우리 가 '&' 도 '()' 에 넣 으 면 제출 한 숙제 가 작업 목록 에 있 지 않다 는 것 을 알 게 될 것 이다. 즉, ">filename 2>&1" 을 통 해 볼 수 없다 는 것 이다.왜 이렇게 하면 HUP 신호 의 영향 을 피 할 수 있 는 지 살 펴 보 자.
subshell 예제
[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.com
root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

상례 에서 알 수 있 듯 이 새로 제출 한 프로 세 스 의 부모 ID (PPID) 는 1 (init 프로 세 스 의 PID) 이지 현재 터미널 의 프로 세 스 ID 가 아 닙 니 다.따라서 현재 터미널 의 하위 프로 세 스에 속 하지 않 기 때문에 현재 터미널 의 HUP 신호 에 영향 을 받 지 않 습 니 다.
disown
필드:
명령 전에 nohup 이나 setsid 를 미리 추가 하면 HUP 신호 의 영향 을 피 할 수 있다 는 것 을 이미 알 고 있 습 니 다.그러나 우리 가 아무런 처리 도 하지 않 고 명령 을 내 렸 다 면 어떻게 보완 해 야 HUP 신호 의 영향 을 피 할 수 있 을 까?
해결 방법:
이 때 는 nohup 이나 setsid 를 추가 하려 면 이미 늦 었 고 작업 스케줄 과 disown 을 통 해 이 문 제 를 해결 할 수 밖 에 없습니다.disown 의 도움 정 보 를 살 펴 보 겠 습 니 다.
disown [-ar] [-h] [jobspec ...]
	Without options, each jobspec is  removed  from  the  table  of
	active  jobs.   If  the -h option is given, each jobspec is not
	removed from the table, but is marked so  that  SIGHUP  is  not
	sent  to the job if the shell receives a SIGHUP.  If no jobspec
	is present, and neither the -a nor the -r option  is  supplied,
	the  current  job  is  used.  If no jobspec is supplied, the -a
	option means to remove or mark all jobs; the -r option  without
	a  jobspec  argument  restricts operation to running jobs.  The
	return value is 0 unless a jobspec does  not  specify  a  valid
	job.

우 리 는 다음 과 같은 방식 으로 우리 의 목적 을 달성 할 수 있 음 을 알 수 있다.
CTRL - z 활용
우리 의 일상적인 작업 에서, 우 리 는 CTRL - z 로 현재 프로 세 스 를 백 엔 드 에 걸 어 놓 고 실행 을 멈 추고, 다른 작업 을 실행 한 다음, fg 로 걸 려 있 는 프로 세 스 를 백 엔 드 에 다시 놓 을 수 있 습 니 다. (bg 로 걸 려 있 는 프로 세 스 를 백 엔 드 에 놓 을 수도 있 습 니 다.) 계속 실행 할 수 있 습 니 다.이렇게 하면 우 리 는 한 단말기 에서 여러 작업 을 유연 하 게 전환 하여 실행 할 수 있다 는 점 은 디 버 깅 코드 를 실행 할 때 특히 유용 하 다.코드 편집 기 를 배경 에 걸 고 다시 놓 을 때 커서 포 지 셔 닝 은 지난번 에 걸 었 을 때의 위치 에 머 물 러 다시 찾 는 번 거 로 움 을 피 할 수 있 기 때문이다.
  • 어떤 작업 이 HUP 신 호 를 무시 하도록 jobs 사용 합 니 다.
  • 모든 작업 이 HUP 신 호 를 무시 하도록 disown -h jobspec 사용 합 니 다.
  • 실행 중인 작업 이 HUP 신 호 를 무시 하도록 disown -ah  사용 합 니 다.

  • 주의해 야 할 것 은 disown 을 사용 한 후에 목표 작업 을 작업 목록 에서 제거 합 니 다. 우 리 는 더 이상 disown -rh  을 사용 하여 볼 수 없 지만 jobs 으로 찾 을 수 있 습 니 다.
    그러나 또 하나의 문제 가 있다. 이런 방법의 조작 대상 은 작업 이다. 만약 우리 가 명령 을 실행 할 때 끝 에 '&' 를 추가 하여 그것 을 작업 으로 만 들 고 배경 에서 운행 한다 면 만사 가 다 잘 될 것 이다. 우 리 는 ps -ef 명령 을 통 해 모든 작업 의 목록 을 얻 을 수 있다.그러나 현재 명령 을 작업 으로 실행 하지 않 았 다 면 어떻게 해야만 작업 번 호 를 얻 을 수 있 습 니까?정 답 은 CTRL - z 로!
    CTRL - z 의 용 도 는 현재 프로 세 스 를 걸 고 (Suspend) 명령 으로 작업 번 호 를 조회 한 다음 jobs 으로 배경 에 넣 고 계속 실행 할 수 있 습 니 다.현재 프로 세 스 의 실행 결과 에 영향 을 줄 수 있 으 니 주의해 야 할 것 은 이 방법 을 사용 하 십시오.
    disown 예제 1 (명령 을 제출 할 때 '&' 로 명령 을 배경 에 넣 고 실행 했다 면 'disown' 을 직접 사용 할 수 있 습 니 다)
    [root@pvcent107 build]# cp -r testLargeFile largeFile &
    [1] 4825
    [root@pvcent107 build]# jobs
    [1]+  Running                 cp -i -r testLargeFile largeFile &
    [root@pvcent107 build]# disown -h %1
    [root@pvcent107 build]# ps -ef |grep largeFile
    root      4825   968  1 09:46 pts/4    00:00:00 cp -i -r testLargeFile largeFile
    root      4853   968  0 09:46 pts/4    00:00:00 grep largeFile
    [root@pvcent107 build]# logout

    disown 예제 2 (명령 을 제출 할 때 "&"를 사용 하지 않 고 명령 을 배경 에 넣 고 실행 하면 CTRL - z 와 "bg"를 사용 하여 배경 에 넣 고 "disown"을 사용 할 수 있 습 니 다)
    [root@pvcent107 build]# cp -r testLargeFile largeFile2
    
    [1]+  Stopped                 cp -i -r testLargeFile largeFile2
    [root@pvcent107 build]# bg %1
    [1]+ cp -i -r testLargeFile largeFile2 &
    [root@pvcent107 build]# jobs
    [1]+  Running                 cp -i -r testLargeFile largeFile2 &
    [root@pvcent107 build]# disown -h %1
    [root@pvcent107 build]# ps -ef |grep largeFile2
    root      5790  5577  1 10:04 pts/3    00:00:00 cp -i -r testLargeFile largeFile2
    root      5824  5577  0 10:05 pts/3    00:00:00 grep largeFile2
    [root@pvcent107 build]#

    screen
    필드:
    우 리 는 프로 세 스 가 HUP 신호 의 영향 을 받 지 않도록 하 는 방법 을 이미 알 고 있 습 니 다. 그러나 이러한 명령 이 안정 적 인 배경 에서 실행 되 어야 한다 면 모든 명령 에 대해 이러한 조작 을 피 할 수 있 습 니까?
    해결 방법:
    이때 가장 편리 한 방법 은 screen 이다.쉽게 말 하면 screen 은 ANSI/VT 100 의 터미널 시 뮬 레이 터 를 제공 하여 실제 터미널 에서 여러 개의 전체 화면의 가짜 단말 기 를 실행 할 수 있 도록 합 니 다.screen 의 매개 변수 가 매우 많 고 강력 한 기능 을 가지 고 있 습 니 다. 저 희 는 자주 사용 하 는 기능 과 screen 을 사용 하면 HUP 신호 의 영향 을 피 할 수 있 는 이 유 를 간략하게 분석 하 겠 습 니 다.먼저 screen 의 도움말 정 보 를 살 펴 보 겠 습 니 다.
    SCREEN(1)                                                           SCREEN(1)
    
    NAME
           screen - screen manager with VT100/ANSI terminal emulation
    
    SYNOPSIS
           screen [ -options ] [ cmd [ args ] ]
           screen -r [[pid.]tty[.host]]
           screen -r sessionowner/[[pid.]tty[.host]]
    
    DESCRIPTION
           Screen  is  a  full-screen  window manager that multiplexes a physical
           terminal between several  processes  (typically  interactive  shells).
           Each  virtual  terminal provides the functions of a DEC VT100 terminal
           and, in addition, several control functions from the  ISO  6429  (ECMA
           48,  ANSI  X3.64)  and ISO 2022 standards (e.g. insert/delete line and
           support for multiple character sets).  There is a  scrollback  history
           buffer  for  each virtual terminal and a copy-and-paste mechanism that
           allows moving text regions between windows.

    screen 을 사용 하 는 것 이 편리 합 니 다. 다음 과 같은 몇 가지 일반적인 옵션 이 있 습 니 다.
  • 끊 기 모드 에 있 는 세 션 (세 션 이름 지정) 을 jobs 으로 만 듭 니 다.
  • 모든 세 션 을 bg jobspec 로 표시 합 니 다.
  • 지정 한 세 션 을 screen -dmS session name 로 다시 연결 합 니 다.
  • 현재 세 션 을 단축 키 screen -list  로 잠시 중단 합 니 다.

  • 화면 예제
    [root@pvcent107 ~]# screen -dmS Urumchi
    [root@pvcent107 ~]# screen -list
    There is a screen on:
            12842.Urumchi   (Detached)
    1 Socket in /tmp/screens/S-root.
    
    [root@pvcent107 ~]# screen -r Urumchi

    "- r"로 screen 세 션 에 연결 하면 이 가짜 터미널 에서 하고 싶 은 대로 할 수 있 습 니 다. HUP 신호 가 프로 세 스에 영향 을 미 칠 까 봐 걱정 하지 않 아 도 됩 니 다. 명령 마다 "nohup"이나 "setsid"를 추가 하지 않 아 도 됩 니 다.왜 그 럴 까요?다음 두 가지 예 를 보 겠 습 니 다.
    1. screen 을 사용 하지 않 은 새 프로 세 스 트 리
    [root@pvcent107 ~]# ping www.google.com &
    [1] 9499
    [root@pvcent107 ~]# pstree -H 9499
    init─┬─Xvnc
         ├─acpid
         ├─atd
         ├─2*[sendmail]	
         ├─sshd─┬─sshd───bash───pstree
         │       └─sshd───bash───ping

    screen 을 사용 하지 않 았 을 때 우리 가 처 한 bash 는 sshd 의 하위 프로 세 스 임 을 알 수 있 습 니 다. ssh 가 연결 을 끊 었 을 때 HUP 신 호 는 아래 의 모든 하위 프로 세 스 (우리 가 새로 만 든 ping 프로 세 스 포함) 에 영향 을 줄 수 있 습 니 다.
    2. screen 을 사용 한 후 새 프로 세 스 의 프로 세 스 트 리
    [root@pvcent107 ~]# screen -r Urumchi
    [root@pvcent107 ~]# ping www.ibm.com &
    [1] 9488
    [root@pvcent107 ~]# pstree -H 9488
    init─┬─Xvnc
         ├─acpid
         ├─atd     ├─screen───bash───ping
         ├─2*[sendmail]

    screen 을 사용 하면 달라 집 니 다. 이때 bash 는 screen 의 하위 프로 세 스 이 고 screen 은 init (PID 는 1) 의 하위 프로 세 스 입 니 다.그러면 ssh 가 연결 을 끊 었 을 때 HUP 신 호 는 당연히 screen 아래 의 하위 프로 세 스에 영향 을 주지 않 습 니 다.

    좋은 웹페이지 즐겨찾기