The Posix.Process 구조
The Posix.Process 구조
POSIX 프로세스 제어 인터페이스를 제공하는 구조예요.
출처: 문서
본문
시놉시스 (Synopsis)
signature POSIX_PROCESS
structure Process : POSIX_PROCESS
인터페이스 (Interface)
eqtype signal
eqtype pid
val wordToPid : SysWord.word -> pid
val pidToWord : pid -> SysWord.word
val fork : unit -> pid option
val exec : string * string list -> 'a
val exece : string * string list * string list -> 'a
val execp : string * string list -> 'a
datatype waitpid_arg
= W_ANY_CHILD
| W_CHILD of pid
| W_SAME_GROUP
| W_GROUP of pid
datatype exit_status
= W_EXITED
| W_EXITSTATUS of Word8.word
| W_SIGNALED of signal
| W_STOPPED of signal
val fromStatus : OS.Process.status -> exit_status
structure W : sig
include BIT_FLAGS
val untraced : flags
end
val wait : unit -> pid * exit_status
val waitpid : waitpid_arg * W.flags list
-> pid * exit_status
val waitpid_nh : waitpid_arg * W.flags list
-> (pid * exit_status) option
val exit : Word8.word -> 'a
datatype killpid_arg
= K_PROC of pid
| K_SAME_GROUP
| K_GROUP of pid
val kill : killpid_arg * signal -> unit
val alarm : Time.time -> Time.time
val pause : unit -> unit
val sleep : Time.time -> Time.time
설명 (Description)
eqtype signal
fork·exec·wait 등 프로세스 생성과 종료 조작을 담아요.
eqtype pid
sleep·kill·alarm 등 프로세스 신호 조작을 담아요.
val wordToPid : SysWord.word -> pid
val pidToWord : pid -> SysWord.word
이 함수들은 프로세스 ID와 운영체제가 사용하는 정수 표현 사이를 변환해요. wordToPid로 생성된 pid 값이 주어진 시스템에서 유효하거나 현재 실행 중인 프로세스에 해당한다는 검증은 없다는 점에 유의하세요.
val fork : unit -> pid option
새 프로세스를 만들어요. 새 자식 프로세스는 호출한 부모 프로세스의 복사본이에요. fork 실행 후 부모와 자식 프로세스는 독립적으로 실행되지만 다양한 시스템 자원을 공유해요. 성공적으로 완료되면 fork는 자식 프로세스에 NONE을, 부모 프로세스에 자식의 pid를 돌려줘요. 실패하면 OS.SysErr를 발생시켜요.
exec (path, args)
exece (path, args, env)
execp (file, args)
이 함수들은 현재 프로세스 이미지를 새 프로세스 이미지로 교체해요. 호출한 프로세스 이미지가 새 프로세스 이미지로 덮이므로 성공적인 호출에서 반환은 없어요. 처음 두 형태에서 path 인자는 실행 파일의 경로명을 지정해요. 마지막 형태에서 file에 슬래시 문자가 있으면 실행 파일의 경로명으로 취급되고, 그렇지 않으면 이름 file의 실행 파일을 환경 변수 PATH가 지정하는 디렉터리들에서 찾아요. 보통 새 이미지에는 호출 프로그램과 같은 환경이 주어져요. exece의 env 인자는 프로그램이 새 환경을 지정할 수 있게 해요. args 인자는 새 프로그램에 전달될 문자열 인자들의 리스트예요. 관례상 args의 첫 항목은 새 프로그램 파일명의 어떤 형태, 보통 경로나 파일명의 마지막 arc예요.
datatype waitpid_arg
= W_ANY_CHILD
아무 자식 프로세스나
| W_CHILD of pid
주어진 pid를 가진 자식 프로세스
| W_SAME_GROUP
호출하는 프로세스와 같은 프로세스 그룹에 있는 아무 자식 프로세스
| W_GROUP of pid
프로세스 그룹 ID가 pid로 주어진 아무 자식 프로세스
datatype exit_status
= W_EXITED
| W_EXITSTATUS of Word8.word
| W_SIGNALED of signal
| W_STOPPED of signal
이 값들은 프로세스가 멈출 수 있는 방식을 나타내요. 각각 성공적 종료, 주어진 값으로의 종료, 주어진 시그널 수신으로 인한 종료, 주어진 시그널 수신으로 인한 중지를 나타내요. W_EXITSTATUS가 담는 값은 절대 0이 아니어야 해요. 구현이 Posix 구조와 Unix 구조를 모두 제공한다면 Posix.Process.exit_status와 Unix.exit_status 데이터타입은 같아야 해요.
fromStatus sts
주어진 상태의 구체적인 보기를 돌려줘요.
structure W
val untraced : flags
작업 제어를 지원하는 시스템에서 이 플래그는 중지된 자식 프로세스의 상태를 요청해요.
val wait : unit -> pid * exit_status
이 함수는 호출 프로세스가 자식 프로세스 중 하나에 대한 상태 정보를 얻을 수 있게 해요. wait 실행은 자식 프로세스 중 하나의 상태 정보가 이용 가능해질 때까지 실행을 일시 중지해요. 상태 정보가 wait 실행 전에 이미 이용 가능하면 즉시 반환돼요. wait는 자식의 프로세스 ID와 그 종료 상태를 돌려줘요.
waitpid (procs, l)
procs로 지정된 자식 프로세스에 대해서만 상태를 보고한다는 점을 제외하면 wait와 동일해요. 플래그 집합 l로 waitpid의 동작을 수정할 수 있어요.
waitpid_nh (procs, l)
procs로 지정된 자식 중 하나의 상태 정보가 즉시 이용 가능하지 않으면 이 호출이 일시 중지하지 않는다는 점을 제외하면 waitpid와 동일해요. 근거: C에서 waitpid_nh는 대기하지 않음을 나타내는 추가 플래그를 사용해 waitpid로 처리돼요. SML에서 waitpid_nh의 의미는 waitpid와 다른 반환 타입을 나타내므로 두 함수로 나뉘었어요.
exit i
호출하는 프로세스를 종료해요. 부모 프로세스가 wait 관련 호출을 실행 중이면 종료 상태 i를 이용할 수 있게 해줘요. exit은 호출자에게 반환하지 않아요. exit 호출은 열린 I/O 스트림을 비우거나 닫지 않고 OS.Process.atExit도 호출하지 않아요. 열린 POSIX 파일은 닫고, C 버전의 exit과 연관된 동작을 수행해요.
datatype killpid_arg
= K_PROC of pid
ID가 pid인 프로세스
| K_SAME_GROUP
호출하는 프로세스와 같은 프로세스 그룹에 있는 모든 프로세스
| K_GROUP of pid
pid가 지정한 프로세스 그룹에 있는 모든 프로세스
kill (procs, sig)
시그널 sig를 procs가 지정한 프로세스 또는 프로세스 그룹에 보내요.
alarm t
t초가 경과한 뒤 시스템이 호출하는 프로세스에 알람 시그널(alrm)을 보내게 해요. 이전 알람 요청에 남은 시간이 있으면 alarm 함수는 이전 요청의 남은 초 수에 해당하는 0이 아닌 값을 돌려줘요. 대기 중인 호출이 없으면 0을 돌려줘요.
val pause : unit -> unit
잡히거나 프로세스를 종료하는 시그널이 전달될 때까지 호출하는 프로세스를 일시 중지해요.
sleep t
t초가 경과하거나, 잡히거나 프로세스를 종료하는 시그널을 받을 때까지 현재 프로세스의 실행을 일시 중지해요.## 더 알아보기 (Learn more)
- [ Top | Parent | Contents | Index | Root ] Generated April 12
- 2004 Last Modified July 1
- 2002 Comments to John Reppy. This document may be distributed freely over the internet as long as the copyright notice and license terms below are prominently displayed within every machine-readable copy. Copyright © 2004 AT&T and Lucent Technologies. All rights reserved. Permission is granted for internet users to make one paper copy for their own personal use. Further hardcopy reproduction is strictly prohibited. Permission to distribute the HTML document electronically on any medium other than the internet must be requested from the copyright holders by contacting the editors. Printed versions of the SML Basis Manual are available from Cambridge University Press. To order
- please visit www.cup.org (North America) or www.cup.cam.ac.uk (outside North America).