Perl에서는 다양한 방식으로 프로세스를 생성할 수 있습니다.
이 튜토리얼에서는 프로세스를 관리하는 몇 가지 방법에 대해 설명합니다.
특수 변수 $$ 또는 $PROCESS_ID 를 사용하여 프로세스 ID를 얻을 수 있습니다.
%ENV 해시는 셸인 상위 프로세스에 환경 변수를 저장합니다. 이러한 변수는 Perl에서 수정할 수 있습니다.
exit() 는 일반적으로 하위 프로세스를 종료하는 데 사용됩니다. 모든 하위 프로세스가 종료된 후 기본 프로세스가 종료됩니다.
열려 있는 모든 핸들은 서브루틴의 dup() 함수에 의해 복사되며 프로세스에 의해 닫힌 모든 핸들은 다른 프로세스에 영향을 주지 않습니다.
Unix 명령은 백틱 연산자를 사용하여 쉽게 실행할 수 있습니다. 백틱에 몇 가지 간단한 명령을 삽입할 수 있습니다. 명령이 실행되면 결과가 반환됩니다.
#!/usr/bin/perl@files = `ls -l`;foreach $file (@files){ print $file;}1;
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
drwxr-xr-x 3 루트 루트 4096 9월 14일 06:46 9-14drwxr-xr-x 4 루트 루트 4096 9월 13일 07:54 android-rw-r--r-- 1 루트 루트 574 9월 17일 15:16 색인 .htmdrwxr-xr-x 3 544 401 4096 7월 6일 16:49 MIME-Lite-3.01-rw-r--r-- 1 루트 루트 71 9월 17일 15:16 test.pl…
system() 함수를 사용하여 Unix 명령을 실행할 수도 있습니다. 이 명령을 실행하면 결과가 직접 출력됩니다. 기본적으로 Perl의 STDOUT이 현재 가리키는 곳, 즉 일반적으로 화면으로 전송됩니다. 리디렉션 연산자 >를 사용하여 특정 파일로 출력할 수도 있습니다.
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
drwxr-xr-x 3 루트 루트 4096 9월 14일 06:46 9-14drwxr-xr-x 4 루트 루트 4096 9월 13일 07:54 android-rw-r--r-- 1 루트 루트 574 9월 17일 15:16 색인 .htmdrwxr-xr-x 3 544 401 4096 7월 6일 16:49 MIME-Lite-3.01-rw-r--r-- 1 루트 루트 71 9월 17일 15:16 test.pl…
아래와 같이 $PATH 또는 $HOME과 같은 환경 변수를 포함하는 명령의 출력에 주의해야 합니다.
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin저는 Perl 변수입니다. /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
Perl의 fork() 함수는 새로운 프로세스를 생성하는 데 사용됩니다.
상위 프로세스에서는 하위 프로세스의 PID를 반환하고 하위 프로세스에서는 0을 반환합니다. 오류가 발생하면(예: 메모리 부족) undef가 반환되고 $!가 해당 오류 메시지로 설정됩니다.
포크는 exec와 함께 사용할 수 있습니다. exec 함수가 따옴표로 묶인 명령을 실행한 후에 프로세스가 종료됩니다.
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
상위 프로세스를 통한 출력 하위 프로세스를 통한 출력 프로세스 ID는 2016년 6월 19일 일요일 22:21:14 CST 프로세스 ID: 47117에 완료되었습니다.
프로세스가 종료되면 CHLD 신호를 상위 프로세스로 보내고 좀비 프로세스가 됩니다. 상위 프로세스는 종료하려면 wait 및 waitpid를 사용해야 합니다. 물론 $SIG{CHLD}를 IGNORG로 설정할 수도 있습니다.
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
상위 프로세스를 통한 출력 하위 프로세스를 통한 출력 프로세스 ID는 2016년 6월 19일 일요일 22:30:56 CST 프로세스 ID: -1에 완료되었습니다.
Perl kill('signal', (Process List))은 프로세스 그룹에 신호를 보냅니다. signal은 전송된 디지털 신호이고, 9는 프로세스를 종료하는 것입니다.
먼저 Linux에서 일반적으로 사용되는 신호를 살펴보겠습니다. 다음 목록을 참조하세요.
신호 이름 및 값 주석 설명——————————————————————————————————————————— ———HUP 1 A 정지 감지 INT 2 A 키보드 중단 QUIT 3 A 키보드 중단 ILL 4 A 잘못된 명령 ABRT 6 C 오류 FPE 8 C 부동 소수점 비정상 KILL 9 AF 터미널 신호 USR1 10 A 사용자 정의 신호 1SEGV 11 C 잘못된 메모리 액세스 USR2 12 A 사용자 정의 신호 2PIPE 13 A 판독기가 없는 파이프 ALRM에 쓰기 14 A 알람 시계의 타이머 신호 TERM 15 A 터미널 신호 CHLD 17 B 하위 프로세스 종료 CONT 18 E 중지된 경우 계속 중지 19 DF 프로세스 중지 TSTP 20 D tty 21에 중지 명령 TTIN을 입력합니다. D 백그라운드 프로세스 22 D의 tty에 TTOU를 입력합니다. 백그라운드 프로세스로 tty 출력
다음 예에서는 프로세스 104 및 102에 SIGINT 신호를 보냅니다.