$ 수면 100 &[1] 9298
사용
피도프지정된 프로그램 이름의 프로세스 ID를 볼 수 있습니다.
$ pidof sleep9298
$ 고양이 /proc/9298/maps08048000-0804b000 r-xp 00000000 08:01 977399 /bin/sleep0804b000-0804c000 rw -p 00003000 08:01 977399 /bin/sleep0804c000-0806d000 rw-p 0804c000 00:00 0 [힙]b7c8b000-b7cca000 r--p 00000000 08:01 443354...bfbd8000-bfbed000 rw-p bfbd8000 00:00 0 [스택]ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
프로그램이 실행된 후 메모리에 로드되어 프로세스가 됩니다. 위는 프로그램 명령, 데이터 및 프로그램 명령줄 매개변수와 환경 변수를 저장하는 데 사용되는 일부 스택 공간을 포함하는 프로세스의 메모리 이미지(가상 메모리)를 보여줍니다. 동적 메모리 응용 프로그램에 사용되는 힙 공간이 할당되었습니다.
명령줄에서 프로그램을 실행하는 과정에 대한 자세한 내용은 "Linux 명령줄에서 프로그램을 실행하는 순간"을 참조하세요.
실제로 프로세스를 생성하는 다른 방법, 즉 프로그램이 실행되도록 하는 방법이 있습니다. 예를 들어 일부 구성을 통해 시스템이 시작될 때 자동으로 프로그램을 시작할 수 있습니다.
남자 초기화) 또는 구성을 통해
크론드(또는
~에) 정기적으로 프로그램을 시작하도록 합니다. 그 외에 쉘 스크립트를 작성하여 프로그램을 스크립트 파일에 작성하는 방법도 있습니다. 스크립트 파일이 실행되면 파일 안의 프로그램이 실행되어 프로세스가 됩니다. 이러한 메소드에 대한 자세한 내용은 소개하지 않습니다. 프로세스의 속성을 보는 방법을 알아보겠습니다.
추가해야 할 한 가지는 명령줄에서 프로그램을 실행하려면 다음을 전달할 수 있다는 것입니다.
한도내장 명령은 프로세스가 열 수 있는 최대 파일 설명자 수, 최대 스택 공간, 가상 메모리 공간 등과 같이 프로세스가 활용할 수 있는 리소스를 설정하는 데 사용됩니다. 구체적인 사용법은 다음을 참조하세요.
도움 제한.
통과할 수 있다
추신프로세스 관련 속성 및 상태를 보려면 명령을 사용하십시오. 이 정보에는 프로세스가 속한 사용자, 프로세스에 해당하는 프로그램 및 프로세스가 포함됩니다.
CPU메모리 사용량 및 기타 정보. 이를 보는 방법에 익숙해지면 관련 통계 분석 및 기타 작업에 도움이 될 수 있습니다.
시스템의 모든 현재 프로세스 속성을 확인합니다.
$ ps -ef
명령어, 프로세스에 특정 문자가 포함된 프로그램에 해당하는 프로세스를 봅니다.
ID1입니다.
TTY을 위한? 터미널과 관련이 없음을 나타냅니다.
$ ps -C 초기화 PID TTY 시간 CMD 1 ?
특정 사용자가 시작한 프로세스를 선택합니다.
$ ps -U 팔콘
지정된 형식에 따라 지정된 내용을 출력합니다. 다음은 명령 이름과 내용을 출력합니다.
CPU이용률:
$ ps -e -o %C %c
인쇄
CPU가장 많이 사용되는 상위 4개 프로그램:
$ ps -e -o %C %c | sort -u -k1 -r | head -5 7.5 firefox-bin 1.1 Xorg 0.8 scim-panel-gtk 0.2 scim-bridge
가장 큰 가상 메모리를 사용하여 5개의 프로세스를 가져옵니다.
$ ps -e -o %z %c | sort -n -k1 -r | head -5349588 firefox-bin 96612 xfce4-terminal 88840 xfdesktop 76332 gedit 58920 scim-panel-gtk
시스템의 모든 프로세스 사이에는 "친족" 관계가 있습니다.
pstree이 관계를 확인하세요.
$ pstree
시스템 프로세스 호출 트리가 위에 인쇄되며 현재 시스템의 모든 활성 프로세스 간의 호출 관계를 명확하게 볼 수 있습니다.
$ 탑
이 명령의 가장 큰 특징은 프로세스 정보를 동적으로 볼 수 있다는 것입니다. 물론 다음과 같은 다른 매개변수도 제공합니다.
-에스누적 실행 시간에 따라 정렬하여 조회할 수도 있고,
-유지정된 사용자 등이 시작한 프로세스를 봅니다.
다시 채우다:
맨 위이 명령은 대화형을 지원합니다. 예를 들어 다음을 지원합니다.
유이 명령은 사용자의 모든 프로세스를 표시하고 전달을 지원합니다.
케이사용하는 경우 프로세스를 종료하는 명령입니다.
-n 1일괄 처리 모드를 활성화하는 옵션의 구체적인 사용법은 다음과 같습니다.
$ 상단 -n 1 -b
흥미로운 문제에 대해 논의해 보겠습니다. 동시에 하나의 프로그램만 실행하는 방법입니다.
즉, 프로그램이 실행되는 동안에는 다시 시작할 수 없습니다. 그럼 무엇을 해야 할까요?
동일한 프로그램이 여러 복사본에 복사되고 파일 이름이 다르며 다른 위치에 배치되면 상황이 더욱 악화되므로 가장 간단한 경우를 고려하십시오. 즉, 이 프로그램은 전체 시스템에서 고유하며 이름도 고유합니다. . 이 경우 위의 질문에 답할 수 있는 방법은 무엇입니까?
일반적인 메커니즘은 프로그램 시작 시 실행 여부를 확인하고, 실행되면 중지하고, 그렇지 않으면 후속 코드를 계속 실행하는 것입니다.
전략은 다양하므로 이전 가정을 통해 프로그램 파일 이름과 코드의 고유성이 보장됩니다.
추신이 명령은 현재 모든 프로세스에 해당하는 프로그램 이름을 찾아 자신의 프로그램 이름과 하나씩 비교합니다. 이미 존재한다면 이미 실행되었다는 의미입니다.
ps -e -o %c | tr -d | grep -q ^init$ # 현재 프로그램이 실행되는지 확인합니다. [ $? -eq 0 ] && 종료 # 그렇다면 종료, $? 성공적으로 실행되었습니다
실행될 때마다 먼저 지정된 위치에 자신을 저장하는 프로세스가 있는지 확인하십시오.
ID파일이 없으면 계속 실행하고, 있으면 프로세스를 봅니다.
ID실행 중이라면 종료하고, 그렇지 않으면 새 프로세스를 파일에 다시 작성하십시오.
ID, 그리고 계속하세요.
pidfile=/tmp/$0.pidif [ -f $pidfile ]; OLDPID=$(cat $pidfile) ps -e -o %p | tr -d | grep -q ^$OLDPID$ [ $? &&exitfiecho $$ > $pidfile#... 코드 본문# 신호 0의 동작을 설정합니다. 프로그램이 종료되면 신호가 트리거되어 임시 파일 트랩 rm $pidfile 0을 삭제합니다.
더 많은 구현 전략을 직접 사용해 보세요!
각 프로세스가 원활하게 실행될 수 있도록 보장하는 것 외에도 특정 작업이 먼저 완료되도록 하기 위해 시스템은 프로세스를 예약할 때 우선 순위에 따른 타임 슬라이스 회전의 공통 예약 알고리즘과 같은 특정 예약 방법을 사용합니다. 이 경우 합격할 수 있습니다.
레니스실행 중인 프로그램의 우선순위를 조정합니다. 예: `
$ ps -e -o %p %c %n grep xfs 5089 xfs 0
$ renice 1 -p 5089renice: 5089: setpriority: 작업이 허용되지 않음$ sudo renice 1 -p 5089 #권한이 필요합니다. [sudo] falcon:5089에 대한 비밀번호: 이전 우선순위 0, 새 우선순위 1$ ps -e -o %p % c %n | grep xfs #다시 보세요. 우선순위가 조정되었습니다. 5089 xfs 1
명령줄을 통해 프로그램을 실행하고 프로세스를 생성할 수 있기 때문에 종료하는 방법도 있습니다. 통과할 수 있다
죽이다이 명령은 사용자가 시작한 프로세스에 신호를 보내 프로세스를 종료합니다. 물론 "보편적"입니다.
뿌리거의
죽이다모든 프로세스(제외
초기화밖의). 예를 들어,
$ sleep 50 & #프로세스 시작 [1] 11347$ kill 11347
죽이다이 명령은 기본적으로 종료 신호를 보냅니다(
SIGTERM)을 프로그램에 추가하고 프로그램을 종료하지만
죽이다다른 신호도 전송될 수 있으며 이는 다음을 통해 정의될 수 있습니다.
남자 7 신호를 통해서도 보실 수 있습니다
죽여 -l그것을 나열하십시오.
$ man 7 signal$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15 ) 시그텀 16) SIGSTKFLT17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+439) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+1247) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-1451) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-1055) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-659) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX
예를 들어
죽이다보내라는 명령
시그스톱프로그램에 일시 중지 신호를 보낸 다음 전송
SIGCONT신호는 계속 작동합니다.
$ sleep 50 &[1] 11441$ jobs[1]+ Running sleep 50 &$ kill -s SIGSTOP 11441 #이것은 포그라운드 프로세스에서 CTRL+Z 작업을 수행하는 것과 동일합니다 $ jobs[1]+ Stopped sleep 50$ kill - s SIGCONT 11441 #이것은 백그라운드 프로세스를 실행하는 데 사용한 이전 bg %1 작업과 동일합니다. $ jobs[1]+ Running sleep 50 &$ kill %1 #현재 세션에서는 작업 번호를 통해 프로세스를 제어할 수도 있습니다. $ jobs[1]+ 종료된 절전 모드 50
보이는
죽이다이 명령은 매우 좋은 기능을 제공하지만 프로세스에만 기반할 수 있습니다.
ID또는 프로세스를 제어하는 작업,
죽이다그리고
살인자프로그램 이름이나 사용자 이름으로 프로세스를 제어하는 방법을 확장하는 더 많은 옵션이 제공됩니다. 자세한 사용법은 해당 설명서를 참조하세요.
프로그램 종료 시 프로그램이 정상적으로 종료되었는지, 비정상적으로 종료되었는지 어떻게 확인하나요? 아직도 Linux의 고전을 기억하시나요?
안녕 세계프로그램? 코드 끝에는 항상 한 줄이 있습니다.
0을 반환성명. 이것
0을 반환실제로 프로그래머는 프로세스가 정상적으로 종료되는지 확인할 수 있습니다. 프로세스가 다른 값을 반환하면 아직 실행되지 않았기 때문에 프로세스가 비정상적으로 종료되었다고 안전하게 말할 수 있습니다.
0을 반환이 문은 종료됩니다.
그렇다면 프로세스의 종료 상태, 즉 반환된 값을 확인하는 방법은 무엇일까요?
존재하다
껍데기, 이 특수 변수를 확인할 수 있습니다
$?, 이전 명령이 실행된 후 종료 상태를 저장합니다.
$ test1bash: test1: 명령을 찾을 수 없음$ echo $?127$ cat ./test.c | grep hello$ echo $?1$ cat ./test.c | grep hi printf(안녕하세요!n);$ echo $?0
0을 반환하는 것이 암묵적인 규칙이 된 것 같습니다. 이를 명확하게 규정하는 표준은 없지만 프로그램이 정상적으로 반환되면 언제든지 반환될 수 있습니다.
$?에서는 0이 검출되지만, 비정상일 경우 항상 0이 아닌 값이 검출됩니다. 이는 프로그램이 끝나면 다음 사항을 따르는 것이 가장 좋다는 것을 알려줍니다.
0번 출구누구나 시험에 합격할 수 있도록
$?프로그램이 정상적으로 종료되는지 확인합니다. 어느 날 누군가가 가끔 귀하의 프로그램을 사용하여 종료 상태를 확인하려고 시도했지만 귀하는 설명할 수 없는 결과를 반환했습니다.
-1또는 1, 그러면 그는 매우 괴로워하고 자신이 작성한 프로그램에 문제가 있는지 궁금해할 것입니다. 그는 오랫동안 그것을 확인하지만 당신의 프로그래밍 습관을 결코 의심하지 않을 정도로 당신을 신뢰하기 때문에 당황할 것입니다. 시작부터 끝까지 달라집니다!
설계와 구현을 용이하게 하기 위해 대규모 작업은 일반적으로 더 작은 모듈로 나뉩니다. 서로 다른 모듈은 시작된 후에 프로세스가 되며 어떻게 서로 통신하여 데이터를 교환하고 함께 작동합니까? 파이프(명명되지 않은 파이프 및 명명된 파이프), 신호(
신호), 메시지 (
메시지) 큐(메시지 큐), 공유 메모리(
mmap/먼맵), 세마포어(
신호기, 주로 동기화, 프로세스 간, 프로세스의 서로 다른 스레드 간), 소켓(
소켓, 서로 다른 기계 간의 프로세스 통신 지원) 등이 있으며 Shell에서는 일반적으로 파이프와 신호가 직접 사용됩니다. 다음은 쉘 프로그래밍에서 파이프와 신호 메커니즘의 일부 사용을 주로 소개합니다.
Linux에서는 다음을 통과할 수 있습니다.
|후자 프로그램의 입력을 이전 프로그램의 출력에 연결하는 데 사용할 수 있도록 두 개의 프로그램을 연결하므로 파이프라고 생생하게 불립니다. C 언어에서는 이름 없는 파이프를 만드는 것이 매우 간단하고 편리합니다.
파이프함수, 두 요소 전달
정수유형의 배열이 가능합니다. 이 배열은 실제로 두 개의 파일 설명자를 저장합니다. 상위 프로세스가 첫 번째 파일 설명자에 무언가를 쓴 후 하위 프로세스는 첫 번째 파일 설명자에서 이를 읽을 수 있습니다.
너무 많은 명령줄을 사용하는 경우 이 파이프는
|자주 사용해야합니다. 예를 들어 위에 데모가 있습니다.
추신명령의 출력은 다음과 같습니다
grep명령 입력:
$ ps -ef 초기화 |
이 "파이프"가 실제로 두 프로그램의 입력과 출력을 연결할 수 있을 만큼 마술적이라고 생각할 수도 있습니다. 어떻게 구현됩니까? 실제로 이러한 명령 집합이 입력되면 현재 셸은 적절한 구문 분석을 수행하고 이전 프로세스의 출력을 파이프의 출력 파일 설명자와 연결하고 후속 프로세스의 입력을 파이프의 입력 파일 설명자와 연결합니다. 이 연관 프로세스는 입력 및 출력을 통해 기능을 리디렉션합니다.
멍청이(또는
fcntl) 달성합니다.
명명된 파이프는 실제로 파일입니다. 명명되지 않은 파이프도 파일과 같습니다. 두 개의 파일 설명자와 관련되어 있지만 한쪽에서만 읽고 다른 쪽에서는 쓸 수 있습니다. 작업 중에 선입선출을 충족해야 하며, 내용이 없는 명명된 파이프에서 읽으려고 하면 마찬가지로 명명된 파이프에 쓰려고 하는데 현재 시도 중인 프로그램이 없으면 차단됩니다. 읽으면 차단됩니다. 아래에서 효과를 확인하세요.
$ mkfifo fifo_test #mkfifo 명령을 통해 유명한 파이프를 생성합니다. $ echo somefefe > fifo_test #fifo_test 파일에 내용을 쓰려고 시도하지만 다음 작업을 계속하려면 다른 터미널을 열어야 합니다. $ cat fifo_test #다른 터미널을 엽니다. , 기억하세요. 다른 것을 열어보세요. fifo_test somefefe의 내용을 읽으려고 합니다.
여기
에코그리고
고양이두 가지 다른 프로그램이 있습니다. 이 경우에는
에코그리고
고양이시작된 두 프로세스 사이에는 상위-하위 관계가 없습니다. 그러나 명명된 파이프를 통해 계속 통신할 수 있습니다.
이러한 통신 방법은 특정 상황에 매우 적합합니다. 예를 들어 이러한 아키텍처는 두 개의 애플리케이션으로 구성되며 그 중 하나는 루프를 통해 지속적으로 읽습니다.
fifo_test다음에 무엇을 해야 할지 결정하기 위해 콘텐츠를 작성합니다. 이 파이프에 내용이 없으면 무한 루프로 인해 리소스를 소비하지 않고 그곳에서 차단됩니다. 다른 파이프는 제어 프로그램으로 계속 흐릅니다.
fifo_test이전 프로그램에 수행할 작업을 알려주는 제어 정보를 여기에 작성합니다. 아래에 매우 간단한 예를 작성해 보세요. 일부 제어 코드를 디자인한 다음 제어 프로그램이 계속 작동합니다.
fifo_test이를 입력하면 애플리케이션은 이러한 제어 코드를 기반으로 다양한 작업을 완료합니다. 물론, 당신도 갈 수 있습니다
fifo_test제어 코드를 제외한 다른 데이터를 전달합니다.
애플리케이션 코드
$ cat app.sh #!/bin/bash FIFO=fifo_test while :: do CI=`cat $FIFO` #CI --> 제어 정보 케이스 $CI in 0) echo 제어 번호가 ZERO입니다. 뭔가를 하세요... ;; 1) echo Control 번호가 1입니다. 뭔가를 하세요... ;; *) echo Control 번호가 인식되지 않습니다. 다른 것을 하세요... ;;
제어 프로그램 코드
$ cat control.sh #!/bin/bash FIFO=fifo_test CI=$1 [ -z $CI ] && echo 제어 정보는 비어 있으면 안 됩니다 && 종료 echo $CI > $FIFO
한 프로그램은 파이프를 통해 다른 프로그램의 작업을 제어합니다.
$ chmod +x app.sh control.sh # 사용자가 실행할 수 있도록 이 두 프로그램의 실행 권한을 수정합니다. $ ./app.sh # 터미널에서 이 애플리케이션을 시작하고 ./control.sh를 통해 제어를 보냅니다. 출력을 확인합니다. 코드 뒤에 Control 번호가 ONE이면 다른 일을 하세요... #1을 보낸 후 Control 번호가 ZERO라면 다른 일을 하세요... #0을 보낸 후 Control 번호가 인식되지 않으면 다른 일을 하세요... #제어 코드 $ ./control.sh 1 뒤에 알 수 없는 내용 보내기 #다른 터미널에서 애플리케이션의 작업을 제어하기 위한 제어 정보를 보냅니다. $ ./control.sh 0 $ ./control.sh 4343
이러한 애플리케이션 아키텍처는 로컬 다중 프로그램 작업 설계에 매우 적합합니다.
웹 CGI, 그러면 원격 제어 요구 사항에도 적합합니다. 소개하다
웹 CGI유일한 변화는 제어 프로그램이다
./control.sh넣다
편물~의
CGI디렉토리를 수정하고 이를 준수하도록 일부 수정합니다.
CGI문서 출력 형식의 표현을 포함하는 사양(파일 시작 부분에 출력해야 함)
콘텐츠 유형: 텍스트/html빈 줄) 및 입력 매개변수 획득
(편물입력 매개변수는 다음 위치에 저장됩니다.
QUERY_STRING환경 변수). 그래서 아주 간단한
CGI제어 프로그램은 다음과 같이 작성할 수 있습니다.
#!/bin/bashFIFO=./fifo_testCI=$QUERY_STRING[ -z $CI ] && 제어 정보가 비어 있으면 안 됩니다 && exitecho -e content-type: text/htmlnnecho $CI > $FIFO
실제 사용시 꼭 확인해주세요
제어.sh접근할 수 있는
fifo_test파이프이며 브라우저를 통한 제어를 위한 쓰기 권한이 있습니다.
app.sh:
http://ipaddress_or_dns/cgi-bin/control.sh?0
물음표
?다음 내용은
QUERY_STRING, 이전과 유사
$1.
이러한 응용은 원격 제어, 특히 임베디드 시스템의 원격 제어에 있어 실질적인 의미가 큽니다. 작년 여름 강좌에서는 이런 방식으로 모터의 원격 제어를 구현했습니다. 먼저, 속도, 방향 제어 등 모터의 회전을 제어하는 간단한 애플리케이션을 구현합니다. 원격 제어를 달성하기 위해 우리는 모터 회전과 관련된 다양한 속성을 제어하는 일부 제어 코드를 설계했습니다.
C 언어에서 명명된 파이프를 사용하려면 데이터를 읽고 쓸 때 다음을 사용한다는 점을 제외하면 Shell과 유사합니다.
읽다,
쓰다전화, 만들기
FIFO다음과 같은 경우에 사용됩니다.
mkfifo함수 호출.
신호는 Linux 사용자가 다음을 통해 액세스할 수 있는 소프트웨어 인터럽트입니다.
죽이다명령은 특정 신호를 프로세스에 보내거나 다음과 같은 일부 신호를 키보드를 통해 보낼 수 있습니다.
Ctrl+C트리거할 수 있습니다
SGIINT신호를 보내는 동안
Ctrl+트리거할 수 있습니다
SGIQUIT신호 등 또한 커널은 범위를 벗어난 메모리에 액세스하는 경우와 같은 특정 상황에서 프로세스에 신호를 보냅니다.
SGISEGV신호는 물론 프로세스 자체도 통과할 수 있습니다.
죽이다,
들어올리다함수가 자신에게 신호를 보낼 때까지 기다립니다. Linux에서 지원되는 신호 유형의 경우 다음을 전달할 수 있습니다.
남자 7 신호또는
죽여 -l관련 목록 및 지침을 참조하세요.
일부 신호의 경우 프로세스에 기본 응답 동작이 있는 반면, 일부 신호의 경우 프로세스는 이를 단순히 무시할 수도 있습니다. 물론 사용자는 특정 신호에 대해 특수 처리 기능을 설정할 수도 있습니다. 쉘에서는 다음을 전달할 수 있습니다.
덫신호(명령 또는 정의된 함수)에 대한 응답으로 동작을 설정하는 명령(셸 내장 명령)이며 C 언어에서는 다음을 사용할 수 있습니다.
신호시그널에 등록된 핸들러 함수를 호출합니다. 이건 그냥 데모일 뿐이야
덫명령의 사용법.
$ function signal_handler { echo hello, world. } # signal_handler 함수 정의 $ Trap signal_handler SIGINT # 이 명령 설정을 실행합니다: SIGINT 신호를 받으면 hello, world를 인쇄합니다. $ hello, world # 화면을 보려면 CTRL+C를 누르세요. 월드 문자열이 출력됩니다.
마찬가지로 신호 0의 응답 동작을 설정하면 다음을 사용할 수 있습니다.
덫C 언어 프로그램을 시뮬레이션하려면
운동하다프로그램 종료 기능 등록, 즉,
트랩 signal_handler SIGQUIT세트
signal_handler프로그램이 종료되면 함수가 실행됩니다. 신호 0은 다음의 특수 신호입니다.
POSIX.1신호 번호 0은 널(null) 신호로 정의되며, 특정 프로세스가 아직 존재하는지 여부를 판별하는 데 자주 사용됩니다. 이 신호는 프로그램이 종료될 때 트리거됩니다.
$ cat sigexit.sh#!/bin/bashfunction signal_handler { echo hello, world}trap signal_handler 0$ chmod +x sigexit.sh$ ./sigexit.sh #실제 셸 프로그래밍은 프로그램이 종료될 때 일부 정리 작업을 수행하기 위해 이 방법을 사용합니다. 임시 파일 작업 마무리 안녕하세요, 세계
여러 명령을 전달할 때
|,>,<, ;, (,)이 명령 시퀀스를 함께 결합하면 일반적으로 파이프 등을 통해 통신하는 여러 프로세스가 시작됩니다. 때로는 작업을 실행할 때 처리해야 할 다른 작업이 있기 때문에 명령 시퀀스 끝에 &를 추가하거나 명령을 실행한 후 다음을 누르는 경우가 많습니다.
Ctrl+Z이전 명령을 일시 중지합니다. 다른 작업을 수행하기 위해. 다른 작업을 완료한 후 통과
fg이 명령은 백그라운드 작업을 포그라운드로 전환합니다. 이러한 제어 프로세스를 일반적으로 작업 제어라고 하며 해당 명령 시퀀스를 작업이라고 합니다. 이 작업에는 하나 이상의 프로그램, 하나 이상의 프로세스가 포함될 수 있습니다. 다음은 일반적으로 사용되는 몇 가지 작업 제어 작업을 보여줍니다.
$ 수면 50 &[1] 11137
셸 내장 명령 사용
fg작업 1을 전경으로 가져오고 키를 누릅니다.
Ctrl+Z프로세스를 일시 중지
$ fg %1sleep 50^Z[1]+ 중지된 수면 50
$ jobs # 현재 작업 상태를 확인합니다. 하나의 작업이 중지되었습니다. [1] + Stopped sleep 50$ sleep 100 & # 다른 작업을 백그라운드에서 실행하도록 합니다. [2] 11138$ jobs # 현재 작업 상태를 확인합니다. 하나는 실행 중이고 다른 하나는 실행 중입니다. 중지됨 [ 1]+ 중지된 절전 50[2]- 실행 중인 절전 100 &
$ bg %1[2]+ 수면 50 &
그러나 명령줄에서 작업 제어를 사용하려면 현재 셸, 커널 터미널 드라이버 등이 작업 제어를 지원해야 합니다.
"UNIX 환경의 고급 프로그래밍"