Perl 포크 기능

Perl Pokeu Gineung



fork()는 실행 중인 프로세스의 하위 프로세스를 생성하는 데 사용되는 Perl의 내장 함수이며 Linux 운영 체제에서만 작동합니다. 실행 중인 프로세스의 별도 복사본을 만들고 두 프로세스를 병렬로 실행합니다. 따라서 상위 프로세스의 변수가 업데이트되면 하위 프로세스의 동일한 변수에 아무런 영향을 미치지 않으며 그 반대의 경우도 마찬가지입니다. 이 튜토리얼에서는 Perl에서 fork() 함수를 사용하는 방법을 보여줍니다.

통사론:

fork() 함수의 구문은 다음과 같습니다. 숫자 값 또는 'undef'를 반환합니다. fork() 함수가 성공적으로 작동하면 특정 프로세스 ID가 반환되거나 하위 프로세스에 대해 0이 반환됩니다. fork() 함수가 실패하면 'undef'를 반환합니다.







ID 또는 정의되지 않은 포크 ( ) ;

예제 1: Fork() 함수의 간단한 사용

fork() 함수를 사용하여 현재 프로세스에서 하위 프로세스를 생성하는 다음 스크립트를 사용하여 Perl 파일을 생성합니다. 프로세스 ID는 fork() 함수를 실행한 후에 인쇄됩니다. 상위 프로세스와 하위 프로세스의 변수는 서로 다른 메모리 위치에 저장됩니다. 따라서 상위 프로세스에서 변수 값이 변경되면 하위 프로세스의 동일한 변수는 변경되지 않으며 그 반대의 경우도 마찬가지입니다. 이 스크립트에서는 상위 프로세스의 변수가 변경됩니다. 그런 다음 상위 및 하위 프로세스의 변수가 모두 인쇄됩니다.



#!/usr/bin/perl

엄격한 사용 ;
사용 경고 ;
5.34.0 사용 ;

#변수선언
내 $var = '테스트 포크' ;
#현재 프로세스를 포크한다
내 $process_id = 포크 ( ) ;

#프로세스 ID를 확인하세요
만약에 ( $process_id < 0 )
{
말하다 '프로세스를 분기할 수 없습니다.' ;
}
엘시프 ( $process_id == 0 )
{
말하다 '하위 프로세스:' ;
#자식 프로세스의 변수 값을 인쇄합니다.
말하다 '변수의 값: $var' ;
}
또 다른
{
말하다 '상위 프로세스: $process_id' ;
#변수 값 업데이트
$var = '테스트 포크 2' ;
#부모 프로세스의 변수 값을 인쇄합니다.
말하다 '변수의 값: $var' ;
}

산출:



스크립트를 실행하면 다음 출력이 나타납니다. 상위 프로세스의 변수는 “Test Fork 2” 값으로 수정되지만 하위 프로세스의 변수는 변경되지 않습니다. 따라서 자식 프로세스의 변수 값은 “Test Fork”입니다. 이는 포크 이후의 값입니다.





  p1

예제 2: Fork() 및 Wait() 함수 사용

wait() 함수와 함께 fork() 함수의 사용을 보여주는 다음 스크립트를 사용하여 Perl 파일을 만듭니다. 스크립트 시작 부분에 세 개의 변수가 선언됩니다. sleep() 함수는 상위 프로세스의 블록 내부에서 1초 동안 사용되고 하위 프로세스 내부에서는 2초 동안 사용됩니다. 두 변수의 합이 계산되어 상위 프로세스 블록 내부의 다른 변수에 저장됩니다. 두 변수의 값은 곱해져 하위 프로세스 내의 다른 변수에 저장됩니다. wait() 함수는 스크립트 끝에서 다른 프로세스의 작업을 시작하기 전에 한 프로세스의 작업이 완료될 때까지 기다리는 데 사용됩니다. 스크립트에서 fork() 함수가 여러 번 사용되고 많은 프로세스가 동시에 실행되는 경우 교착 상태가 발생할 수 있습니다. wait() 함수를 사용하여 문제를 해결할 수 있습니다.



#!/usr/bin/perl

엄격한 사용 ;
사용 경고 ;
5.34.0 사용 ;

#변수 초기화
내 $n1 = 10 ;
내 $n2 = 25 ;
내 $결과 = 0 ;

#현재 프로세스를 포크한다
내 $process_id = 포크 ( ) ;

#프로세스 ID를 확인하세요
만약에 ( $process_id == 0 )
{
#숫자의 곱셈을 계산합니다.
말하다 '하위 프로세스: $$' ;
$결과 = $n1 * $n2 ;
말하다 '2초만 기다려주세요.. \N ' ;
2 ;
말하다 '$n1과 $n2의 곱은 $result입니다.' ;
}
엘시프 ( $process_id > 0 )
{
#숫자의 합을 계산한다
말하다 '상위 프로세스: $$' ;
$결과 = $n1 + $n2 ;
말하다 '1초만 기다려주세요.. \N ' ;
1 ;
말하다 '$n1과 $n2의 합은 $result입니다.' ;
}
또 다른
{
말하다 '프로세스를 분기할 수 없습니다.' ;
}

#프로세스 작업이 완료될 때까지 기다립니다.
기다리다 ( ) ;

산출:

스크립트를 실행하면 다음 출력이 나타납니다. 출력에 따르면 하위 프로세스가 성공적으로 생성되고 상위 프로세스의 프로세스 ID가 인쇄되며 작업을 완료하기 위해 스크립트가 1초 동안 일시 중지됩니다. 다음으로 자식 프로세스의 프로세스 ID가 출력되고 작업을 완료하기 위해 스크립트가 2초간 일시 중지됩니다. 상위 프로세스와 하위 프로세스의 출력은 나중에 인쇄됩니다.

  p2

결론

Perl의 fork() 함수를 사용하는 목적은 하위 프로세스를 생성하고 상위 및 하위 프로세스의 블록 내에서 다양한 유형의 작업을 수행함으로써 이 자습서에 표시됩니다.