Linux에서 백그라운드 작업을 실행하는 여러 가지 방법

WeChat 공개 계정 "클라우드 컴퓨팅을 배우는 방법은 다음과 같습니다"를 팔로우하고 "001"을 검색하면 Krypton Gan이 편집한 154페이지의 Linux 학습 노트를 얻을 수 있습니다.

오늘은 Linux에서 여러 가지 백그라운드 작업을 실행하는 방법을 소개하겠습니다.

1. 문제 소개

프로그래머들이 가장 참기 힘든 점은 터미널을 사용할 때 네트워크로 인해 ssh 연결이 자주 끊기거나, 화면이 닫히거나, CTRL+C를 실행하는 등의 현상으로 인해 실행 중인 프로그램이 종료되어 작업이 부족해지는 경우가 많다는 것입니다.

그 주된 이유는 위에서 언급한 관련 작업입니다. 기본적으로 쉘은 터미널 세션과 관련된 프로세스에 인터럽트 신호를 보내 프로세스가 터미널과 함께 종료되도록 합니다. 이 문제를 명확히 하려면 다음을 수행해야 합니다. 먼저 두 가지 인터럽트 신호를 이해하십시오.

1) sigint: 신호 인터럽트, Ctrl+C는 이 신호를 보내고 프로그램을 적극적으로 닫습니다.

2) situp: 신호 끊기, 터미널 닫기, 네트워크 연결 끊김, 화면을 닫으면 이 끊기 신호가 전송됩니다.

오늘은 위의 문제를 피하기 위해 Linux에서 여러 가지 백그라운드 작업을 실행하는 방법을 소개하겠습니다.

2.& 기호

실행명령어 끝에 &를 넣어 시작된 프로그램이 sigint 신호를 무시하도록 하는 방법인데, 이때 ctrl+c를 눌러 종료해도 프로세스는 종료되지 않습니다. 네트워크 연결이 끊어져도 프로세스로 인해 프로세스가 종료됩니다.

sh test.sh &

3.nohup 명령

nohup(no hang up)은 작업을 중단하지 않는다는 의미입니다. nohup과 함께 명령을 실행하면 해당 명령이 영구적으로 실행될 수 있습니다. 이는 사용자 터미널과 관련이 없습니다. SSH 연결을 끊어도 작업에 영향을 미치지 않습니다. nohup은 SIGHUP을 캡처하고 이를 무시합니다. , 화면이 꺼지거나 네트워크 연결이 끊어지는 등의 경우 프로세스가 종료되지 않아 ssh가 중단됩니다. 그러나 Ctrl+C를 누르면 프로세스를 닫을 수 있습니다. 따라서 대부분의 경우 nohup과 &를 동시에 사용하여 시작된 프로그램은 ctrl+c나 터미널 닫기로 종료할 수 없습니다. 기본적으로 모든 출력은 nohup.out이라는 파일로 리디렉션됩니다.

nohup 명령어의 기본 사용 형식은 다음과 같습니다.
nohup Command \[ Arg ... \] \[ & \]

백그라운드는 실행을 중단하지 않습니다./test.sh, stdout은 out.log로 출력되고 stderr은 err.log로 출력됩니다.

nohup ./test.sh > out.log 2>err.log  &

관련 숫자의 의미는 다음과 같습니다.

  • 0 – stdin(표준 입력),

  • 1 – stdout(표준 출력), 당연히 nohup 명령 > out.log는 기본 동작인 nohup 명령 1> out.log와 동일합니다.

  • 2 – stderr(표준 오류)

아마도 이 쓰기 방법도 볼 수 있을 것입니다. 이는 stderr도 stdin으로 리디렉션된다는 의미입니다.

nohup ./test.sh > out.log 2>&1  &

4.ctrl + z、작업、fg、bg

우리 프로그램이 시작할 때 &와 nohup을 사용하지 않는다면 어떻게 될까요? 먼저 ctrl + c를 실행하여 전경에서 실행 중인 프로세스를 종료한 다음 다시 시작해야 할까요? 분명히 좋은 방법이 있습니다!

4.1 Ctrl + Z

포그라운드에서 실행중인 작업 프로세스를 백그라운드로 넣어서 일시정지(Pause)하는 것으로 용어로는 일시정지(Suspend)한다.실행은 다음과 같다.

[1]+ Stopped ./test.sh

4.2 직업

현재 백그라운드에서 실행 중인 명령 수를 확인합니다. [jobnumber]는 작업 번호입니다.

jobs  
[1]+ Stopped ./test.sh   
[2]+ Running ./test2.sh &

4.3bg

백그라운드에서 일시 중지된(일시 중지된) 작업 프로세스를 계속 실행합니다. 예를 들어 작업 번호 1(./test.sh)을 백그라운드에 넣어 실행하려면 &

bg 1  

[1]+ ./test.sh  &

4.4fg

계속 실행하려면 백그라운드의 작업 프로세스를 포그라운드로 이동합니다. 예를 들어 작업 번호 2(./test2.sh &)를 포그라운드로 이동합니다.

fg 2   

./test2.sh

5.화면 명령

5.1 소개

위의 방법이 Linux 관련 명령을 통해 전면 및 후면 작업 스케줄링을 구현하면 화면은 또 다른 아이디어를 제공합니다.

인간이 아닌 버전: GNU Screen은 명령줄 터미널 전환을 위해 GNU 프로젝트에서 개발한 무료 소프트웨어입니다. 사용자는 이 소프트웨어를 사용하여 여러 로컬 또는 원격 명령줄 세션에 동시에 연결하고 자유롭게 전환할 수 있습니다. GNU Screen은 창 관리자의 명령줄 인터페이스 버전으로 생각할 수 있습니다. 여러 세션을 관리하기 위한 통합 인터페이스와 해당 기능을 제공합니다.

휴먼 버전: screen은 터미널 세션을 인계(유지)하기 위해 Linux 시스템에서 또 다른 백그라운드 프로그램을 직접 시작하는 가상 터미널 소프트웨어로 대략적으로 생각할 수 있습니다. 직접 연결된 SSH 터미널의 연결이 끊어지면 여전히 프로그램은 SSH 연결이 계속 연결되어 있다고 생각하므로 인터럽트 신호를 받은 후에도 프로세스가 종료되지 않습니다.

5.2 설치

yum install screen

5.3 사용

1) 새 세션을 생성합니다

screen -S yourname -> 新建一个叫yourname的session

2) 현재 세션을 모두 나열합니다.

screen -ls

3) 세션 재개(귀하의 이름으로 세션으로 돌아가기)

screen -r yourname

4) 세션 분리

screen -d yourname -> 远程detach某个session 
screen -d -r yourname -> 结束当前session并回到yourname这个session

5) 세션 삭제

screen -S pid-X quit

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41692221/article/details/131381729
conseillé
Classement