# 시스템

시스템 명령어를 실행하는 가장 쉬운 방법은 백틱으로 감싸는 것입니다. 결과값을 반환 받을 수 있습니다.

```perl
@files = `ls -al`;
```

## eval

## system

```perl
system("ls -al");
```

결과값은 화면으로 출력됩니다.

## fork

fork()는 프로세스를 복제합니다. 새로 생성된 자식 프로세스는 fork()된 시점부터 진행되며 0을 반환받습니다. 부모 프로세스는 자식 프로세스의 프로세스 번호를 반환 받습니다. 프로세스 생성에 실패한 경우에는 `undef`가 반환됩니다.

```perl
my $process_id = fork();
if ($process_id == 0) {
    # Child process
    print "Child process.\n";
} else {
    # Parent process
    print "Parent process.\n";
}
```

생성된 자식 프로세스를 종료하려면 `exit()`를 사용합니다. 자식 프로세스가 모두 종료되기 전에는 메인 프로세스가 종료되지 않습니다.

```perl
exit(0);
```

## 프로세스

특수변수인 `$$` 또는 `$PROCESS_ID`를 사용해서 현재 프로세스 번호를 알아낼 수 있습니다.

- exec

  `system()`과 비슷하지만 명령 실행 전에 현재 프로세스가 종료됩니다.

- kill

  프로세스 그룹에 종료 신호를 보냅니다.

  ```perl
  kill("INT", @proc_list);
  ```

- sleep

  ```perl
  sleep(5); # 5초 동안 쉽니다.
  ```

- times

  프로그램에 소요된 시간을 리스트로 반환합니다.

- wait

  자식 프로세스가 종료될 때까지 기다립니다. 자식 프로세스가 없다면 -1이 반환됩니다.

  ```perl
  $process_id = wait();
  ```

- waitpid