펄 프로 세 스 관리

4866 단어
펄 프로 세 스 관리
Perl 에서 프로 세 스 를 다른 방법 으로 만 들 수 있 습 니 다.
이 강 좌 는 프로 세 스 의 관리 방법 을 토론 할 것 이다.
  • 특수 변 수 를 사용 할 수 있 습 니 다 $$또는 $PROCESS프로 세 스 ID 를 가 져 오 는 ID 입 니 다.
  • % ENV 하 시 는 부모 프로 세 스, 즉 셸 의 환경 변 수 를 저장 합 니 다. Perl 에서 이 변 수 를 수정 할 수 있 습 니 다.
  • exit () 는 보통 하위 프로 세 스 를 종료 하 는 데 사 용 됩 니 다. 주 프로 세 스 는 하위 프로 세 스 가 모두 종료 한 후에 종료 합 니 다.
  • 열 린 모든 핸들 은 서브루틴 에서 dup () 함수 로 복 사 됩 니 다. 모든 닫 힌 프로 세 스 의 모든 핸들 은 다른 프로 세 스에 영향 을 주지 않 습 니 다.

  • 반 따옴표 연산 자
    반 따옴표 연산 자 를 사용 하면 유 닉 스 명령 을 쉽게 실행 할 수 있다.너 는 작은 따옴표 에 간단 한 명령 을 삽입 할 수 있다.명령 실행 후 결 과 를 되 돌려 줍 니 다:
    #!/usr/bin/perl
    
    @files = `ls -l`;
    
    foreach $file (@files){
       print $file;
    }
    
    1;
    

    상기 프로그램 을 실행 하면 출력 결 과 는 다음 과 같 습 니 다.
    drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
    drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
    -rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
    drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
    -rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
    ……
    

    system () 함수
    시스템 () 함수 로 유 닉 스 명령 을 실행 할 수도 있 습 니 다. 이 명령 을 실행 하면 결 과 를 직접 출력 합 니 다.기본적으로 현재 Perl 의 stdOUT 가 가리 키 는 곳 으로 보 내 집 니 다. 보통 화면 입 니 다.지정 한 파일 로 출력 하려 면 재 설정 연산 자 > 를 사용 하 십시오:
    상기 프로그램 을 실행 하면 출력 결 과 는 다음 과 같 습 니 다.
    drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
    drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
    -rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
    drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
    -rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
    ……
    

    홈 의 출력 결과 와 같은 환경 변 수 를 포함 하 는 명령 을 주의해 야 합 니 다. 다음 과 같 습 니 다.
    실례
    #!/usr/bin/perl
     
    $PATH = "我是 Perl 的变量";
     
    system('echo $PATH');  # $PATH 作为 shell 环境变量
    system("echo $PATH");  # $PATH 作为 Perl 的变量
    system("echo \$PATH"); # 转义 $
     
    1;
    
    

    상기 프로그램 을 실행 하면 출력 결 과 는 다음 과 같 습 니 다.
    /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
    

    fork () 함수
    Perl fork () 함 수 는 새 프로 세 스 를 만 드 는 데 사 용 됩 니 다.
    부모 프로 세 스에 서 하위 프로 세 스 의 PID 를 되 돌려 주 고 하위 프로 세 스에 서 0 을 되 돌려 줍 니 다.오류 가 발생 하면 (예 를 들 어 메모리 부족) undef 를 되 돌려 주 고 $!대응 하 는 오류 정보 로 설정 합 니 다.
    fork 는 exec 와 함께 사용 할 수 있 습 니 다.exec 함수 가 따옴표 의 명령 을 실행 하면 프로 세 스 가 끝 납 니 다.
    실례
    #!/usr/bin/perl
     
    if(!defined($pid = fork())) {
       # fork 发生错误返回 undef
       die "无法创建子进程: $!";
    }elsif ($pid == 0) {
       print "通过子进程输出
    "; exec("date") || die "无法输出日期: $!"; } else { # 在父进程中 print "通过父进程输出
    "; $ret = waitpid($pid, 0); print "完成的进程ID: $ret
    "; } 1;

    상기 프로그램 을 실행 하면 출력 결 과 는 다음 과 같 습 니 다.
    通过父进程输出
    通过子进程输出
    2016年 6月19日 星期日 22时21分14秒 CST
    完成的进程ID: 47117
    

    프로 세 스 가 종료 되면 부모 프로 세 스에 CHLD 신 호 를 보 내 면 경직 된 프로 세 스 가 됩 니 다. 부모 프로 세 스 는 wait 와 waitpid 를 사용 하여 종료 해 야 합 니 다.물론 $SIG {CHLD} 을 IGNORG 로 설정 할 수도 있 습 니 다.
    실례
    
    #!/usr/bin/perl
     
    local $SIG{CHLD} = "IGNORE";
     
    if(!defined($pid = fork())) {
       # fork 发生错误返回 undef
       die "无法创建子进程: $!";
    }elsif ($pid == 0) {
       print "通过子进程输出
    "; exec("date") || die "无法输出日期: $!"; } else { # 在父进程中 print "通过父进程输出
    "; $ret = waitpid($pid, 0); print "完成的进程ID: $ret
    "; } 1;

    상기 프로그램 을 실행 하면 출력 결 과 는 다음 과 같 습 니 다.
    通过父进程输出
    通过子进程输出
    2016年 6月19日 星期日 22时30分56秒 CST
    完成的进程ID: -1
    

    Kill 함수
    Perl kill (signal, (Process List)) 은 프로 세 스에 신 호 를 보 냅 니 다.signal 은 보 낸 디지털 신호 로 9 는 프로 세 스 를 죽 이 는 것 입 니 다.
    먼저 Liux 에서 자주 사용 하 는 신 호 를 보 세 요. 다음 목록 을 보 세 요.
    信号名          值          标注          解释
    ————————————————————————————————————————————————————————————
    HUP             1           A             检测到挂起
    INT               2           A             来自键盘的中断
    QUIT            3           A             来自键盘的停止
    ILL               4           A             非法指令
    ABRT          6           C             失败
    FPE             8           C             浮点异常
    KILL             9           AF            终端信号
    USR1          10          A             用户定义的信号1
    SEGV          11          C             非法内存访问
    USR2          12          A             用户定义的信号2
    PIPE           13          A             写往没有读取者的管道
    ALRM         14          A             来自闹钟的定时器信号
    TERM         15          A             终端信号
    CHLD          17          B             子进程终止
    CONT         18          E             如果被停止则继续
    STOP         19          DF            停止进程
    TSTP          20          D             tty键入的停止命令
    TTIN            21          D             对后台进程的tty输入
    TTOU          22          D             对后台进程的tty输出
    

    다음 인 스 턴 스 는 프로 세 스 104 와 102 에 SIGINT 신 호 를 보 냅 니 다.
    실례#!/usr/bin/perl kill('INT', 104, 102); 1;

    좋은 웹페이지 즐겨찾기