프로세스란 사용자가 시스템과 상호 작용할 수 있는 OpenVMS 운영 체제에서 만드는 환경입니다. 프로세스는
분리된 프로세스(다른 프로세스와 독립된 프로세스)이거나
하위 프로세스(자신의 존재와 리소스가 다른 프로세스에 종속된 프로세스)일 수 있습니다. 상위 프로세스라고도 하는 주 프로세스는 분리된 프로세스입니다. 이 장에서 설명하는 내용은 다음과 같습니다.
사용자가 다음 작업 중 하나를 수행하면 시스템에서 프로세스를 만듭니다.
시스템에서 각 대화형 사용자에 대한 프로세스를 만듭니다.
시스템에서 각 일괄 처리 작업에 대한 프로세스를 만듭니다. 일괄 처리 작업이 완료되면 시스템에서 해당 프로세스를 삭제합니다.
SPAWN 명령을 사용하면 시스템에서 프로세스를 만듭니다.
/DETACHED 한정자나 /UIC=uic 한정자를 사용하여 프로그램을 실행하면 시스템에서 프로세스를 만듭니다.
특권, 기호, 논리 이름 등 프로세스가 사용하는 특성이 프로세스 컨텍스트를 구성합니다. 시스템은 프로세스에 고유한 특성을
사용자 인증 파일(UAF)로부터 취합니다. UAF는 시스템에 대한 액세스가 허용된 사용자를 나열하며 각 사용자의 프로세스에 대한 특성을 정의합니다. 일반적으로 시스템 관리자가 UAF를 유지 보수합니다. 프로세스 컨텍스트 해석은 한 번에 하나씩 시스템이 프로그램(이미지 또는 실행 이미지라고도 함)을 실행하는 프로세스 내에서 이루어집니다.
현재 프로세스에 대한 프로세스 컨텍스트를 표시하려면 SHOW PROCESS/ALL 명령을 입력합니다.
다음 보기에서는 프로세스 컨텍스트를 보여 줍니다.
11-DEC-2002 13:30:37.12
[1] User: CLEAVER
[2] Process ID: 24E003DC
[3]
Node: ZEUS Process name: "CLEAVER"
[4]
Terminal: VTA2195: TNA2170: (Host: 16.32.123.45 Port: 6789)
User Identifier: [DOC,CLEAVER]
[5]
Default file spec: DISK1:[CLEAVER]
[7]
Number of Kthreads: 1
Devices allocated: ALPHAI$VTA2195:
Process Quotas:
[8]
CPU limit: Infinite Direct I/O limit: 1024
Buffered I/O byte count quota: 119616 Buffered I/O limit: 1024
Timer queue entry quota: 400 Open file quota: 299
Paging file quota: 100080 Subprocess quota: 30
Default page fault cluster: 64 AST quota: 798
Enqueue quota: 5000 Shared file limit: 0
Max detached processes: 0 Max active jobs: 0
Accounting information:
[9]
Buffered I/O count: 16424 Peak working set size: 13920
Direct I/O count: 12014 Peak virtual size: 185392
Page faults: 11113 Mounted volumes: 0
Elapsed CPU time: 0 00:04:18.55
Connect time: 0 00:08:22.76
Authorized privileges:
NETMBX TMPMBX
Process privileges:
[10]
GROUP may affect other processes in same group
TMPMBX may create temporary mailbox
NETMBX may create network device
Process rights:
[11]
SYS$NODE_ZEUS
Auto-unshelve: on
Image Dump: off
Soft CPU Affinity: off
Parse Style: Traditional
Home RAD: 0
Scheduling class name: none
Process Dynamic Memory Area
[12]
Current Size (Kb) 128.00 Current Size (Pagelets) 256
Free Space (Kb) 111.18 Space in Use (Kb) 16.81
Largest Var Block (Kb) 109.69 Smallest Var Block (bytes) 8
Number of Free Blocks 10 Free Blocks LEQU 64 Bytes 4
There is 1 process in this job:
[13]
SHOW PROCESS/ALL 명령이 실행되는 날짜와 시간입니다.
프로세스에 관련된 계정에 할당된 사용자 이름입니다.
시스템에서 프로세스에 할당한 고유 번호입니다. SHOW PROCESS 명령은 PID 번호를 16진수로 표시합니다.
프로세스에 할당된 이름입니다. 프로세스 이름은 특정 UIC 그룹 내에서 고유하므로, 한 계정으로 로그인된 첫 번째 프로세스에 사용자 이름이 할당됩니다. 동일한 계정으로 로그인된 후속 프로세스에는 터미널 이름이 할당됩니다. DCL 명령 SET PROCESS/NAME을 사용하여 프로세스 이름을 변경할 수 있습니다.
프로세스에 관련된 계정에 할당된 그룹 및 구성원 번호(또는 문자)입니다(예: [DOC,CLEAVER]). 해당 UIC 중 일부는 사용자가 속하는 그룹을 식별합니다. 그룹 내에서는 사용자는 그룹 간에서 보다 더 자유롭게 파일이나 시스템 리소스를 공유할 수 있도록 허용됩니다.
현재 장치 및 디렉토리입니다. DCL 명령 SET DEFAULT를 사용하여 현재 기본값을 변경합니다.
프로세스에 관련된 할당량(한계)입니다. SHOW PROCESS 명령의 /QUOTAS 또는 /ALL 한정자를 사용하여 이러한 할당량을 점검합니다.
프로세스가 사용하는 메모리와 CPU 시간에 대해 계속적으로 업데이트되는 계정입니다. SHOW PROCESS 명령의 /ACCOUNTING 또는 /ALL 한정자를 사용하여 이 정보를 점검합니다.
프로세스에 부여된 특권입니다. 특권은 특정 시스템 작업의 수행을 특정 사용자에게로 제한합니다. SHOW PROCESS 명령의 /PRIVILEGES 또는 /ALL 한정자를 사용하여 특권을 점검합니다.
사용 제어 목록(ACL) 보호와 함께 사용되는 시스템 정의 증명서입니다. 증명서는 ACL에서 사용자를 지정하는 방법을 제공합니다. ACL은 파일, 장치, 우편함 등의 객체 사용자에게 부여하거나 거부할 액세스의 종류를 정의하는 보안 도구입니다.
프로세스가 현재 사용하는 동적 메모리입니다. 이미지가 실행 중인 경우 시스템에서 동적 메모리를 해당 이미지에 할당합니다. 한 프로세스에서 해당 메모리를 더 이상 필요로 하지 않으면 시스템은 이 메모리를 다른 프로세스에 할당합니다. SHOW PROCESS 명령의 /MEMORY 또는 /ALL 한정자를 사용하여 이 정보를 점검합니다.
상위 프로세스에 속하는 하위 프로세스의 목록입니다. 현재 프로세스 다음에 별표(*)가 나타납니다. SHOW PROCESS/SUBPROCESSES 또는 /ALL 명령을 사용하여 이 목록을 점검합니다.
분리된 프로세스는 상위 프로세스에 따라 대화형이거나 비대화형입니다. DCL 명령 RUN 또는 Create Process 시스템 서비스($CREPRC)에 제공한 인수에 따라 사용자나 운영 체제가 로그인을 수행합니다. RUN과 $CREPRC 모두 SYS$SYSTEM에서 LOGINOUT.EXE 이미지를 실행합니다.
SPAWN 명령을 사용하면 현재 프로세스의 하위 프로세스를 만들 수 있습니다. 이 하위 프로세스 내에서 시스템과 상호 작용하고 하위 프로세스에서 로그아웃하여 상위 프로세스로 돌아가거나 상위 프로세스와 하위 프로세스 간에 전환할 수 있습니다. 실행 중인 프로세스는 항상 하나뿐입니다.
시스템의 각 사용자는
작업 트리로 표시됩니다. 작업 트리는 주 프로세스가 맨 위에 있는 모든 프로세스 및 하위 프로세스의 계층 구조입니다. 하위 프로세스는 상위 프로세스에 종속되며 상위 프로세스가 종료되면 삭제됩니다. 기본적으로 하위 프로세스의 이름은 상위 프로세스의 이름과 밑줄 및 고유 번호로 이루어집니다. 예를 들어, 상위 프로세스 이름이 DOUGLASS이면 하위 프로세스 이름은 DOUGLASS_1, DOUGLASS_2 등으로 지정됩니다.
작업을 중단하고, 두 번째 작업을 수행한 다음 원래 작업으로 돌아가려면 Ctrl/Y를 사용하여 첫 번째 작업을 중단하고, 두 번째 작업을 수행할 하위 프로세스를 생성하고, 해당 하위 프로세스를 종료한 다음 CONTINUE 명령을 입력하여 첫 번째 작업으로 돌아갈 수 있습니다. 기본적으로 하위 프로세스를 생성하는 경우 상위 프로세스가 최대 절전 모드로 되며 사용자에게 해당 하위 프로세스 내에서 DCL 수준의 제어권이 부여됩니다. 사용자의 기본 디렉토리는 상위 프로세스의 현재 디렉토리입니다. 예를 들어, Ctrl/Y를 눌러 EVE 편집 세션을 중단할 경우 CONTINUE 명령을 입력하고 Ctrl/W를 눌러 화면을 새로 고칩니다.
원래 작업 수행을 계속하면서 두 번째 작업을 수행하려면 SPAWN/NOWAIT 명령을 사용하여 하위 프로세스를 만들 수 있습니다. SPAWN/NOWAIT는 일괄 처리형의 비대화형 하위 프로세스를 생성하며 입력이 필요 없는 명령을 실행하는 데만 사용됩니다.
상위 및 하위 프로세스가 모두 동시에 실행되고 있기 때문에 두 프로세스가 모두 터미널을 제어하려고 시도합니다. 충돌을 막으려면 다음을 지정하십시오.
하위 프로세스가 터미널이 아닌 지정된 파일에 출력을 기록해야 함을 나타냅니다.
SPAWN 명령 매개 변수 또는 /INPUT 한정자
하위 프로세스가 터미널에서 입력을 읽는 것이 아니라 지정된 명령을 실행해야 함을 나타냅니다.
SPAWN 명령의 /INPUT 한정자를 지정하면 하위 프로세스는 파일 끝 표시기나 심각한 오류가 발생하면 종료되는 비대화형 프로세스로 만들어집니다. DCL 수준에서는 Ctrl/Z는 파일 끝 표시기로 처리됩니다.
사용자가 만드는 각각의 프로세스는 고유하기 때문에, 일반적으로 한 프로세스에서 실행된 명령이 다른 프로세스에 영향을 주지 않습니다. 그러나 터미널에 대한 제어권이 프로세스 간에 전달되므로, 터미널 특성에 영향을 주는 명령(예: SET TERMINAL)은 해당 터미널을 제어하는 프로세스에 영향을 미칩니다. 예를 들어, 한 프로세스에서 에코를 금지한 다음 다시 복원하지 않은 상태로 종료하면 터미널에 대한 제어권을 받는 다음 프로세스에 대해 에코가 금지된 상태로 남아 있게 됩니다. 변경된 모든 터미널 특성을 SET TERMINAL 명령을 사용하여 다시 설정합니다.
다음 보기에서는 사용자가 Ctrl/Y를 눌러서 명령 이미지(TYPE 명령)를 중단하고, 하위 프로세스를 생성하고, 이 하위 프로세스를 종료한 다음, 원래 프로세스로 돌아갑니다.
$ TYPE MICE.TXT
Once the weather turns cold, mice may find a crack in the foundation and enter your house. They are looking for food and shelter from the harsh weather ahead.
Ctrl/Y
$ SPAWN %DCL-S-SPAWNED, process DOUGLASS_1 spawned
%DCL-S-ATTACHED, terminal now attached to process DOUGLASS_1
$ MAIL MAIL>
MAIL> EXIT
$ LOGOUT
Process DOUGLASS_1 logged out at 31-DEC-1999 12:42:12.46
%DCL-S-RETURNED, control returned to process DOUGLASS
$ CONTINUE
Once inside, they may gnaw through electrical wires and raid your food. Because mice reproduce so quickly, what started as one or two mice can quickly become an invasion. If you seal the cracks and holes on the exterior of your foundation, you can prevent these rodents from ever getting in.
SPAWN 명령으로 만든 하위 프로세스를 종료하려면 다음 명령 중 하나를 사용합니다.
LOGOUT 명령을 사용하여 하위 프로세스를 종료하면 이 하위 프로세스는 자신이 만든 모든 하위 프로세스와 함께 삭제되고 사용자는 상위 프로세스로 돌아갑니다.
ATTACH 명령을 사용하여 하위 프로세스를 종료하면 하위 프로세스가 최대 절전 모드로 되고 터미널에 대한 제어권은 지정한 프로세스로 전송됩니다. 프로세스 이름을 ATTACH 명령에 대한 매개 변수로 지정하거나 PID(프로세스 ID) 번호를 ATTACH 명령의 /IDENTIFIER 한정자 값으로 지정해야 합니다.
다음 보기에서는 DOUGLASS_1 하위 프로세스를 종료하고 DOUGLASS 프로세스에 연결하는 방법을 보여 줍니다.
$ ATTACH DOUGLASS
%DCL-S-RETURNED, control returned to process DOUGLASS
$ SHOW PROCESS
11-DEC-2002 10:34:58.50 User: DOUGLASS Process ID: 2061C478
Node: ALPHAI Process name: "DOUGLASS"
Terminal: VTA2195: TNA2170: (Host: 16.32.123.45 Port: 6789)
User Identifier: [DOC,DOUGLASS]
Base priority: 4
Default file spec: DISK1:[DOUGLASS]
Number of Kthreads: 1
Devices allocated: ALPHAI$VTA2195:
Soft CPU Affinity: off
하위 프로세스 컨텍스트란 하위 프로세스가 상위 프로세스로부터 상속받은 환경입니다. 기본적으로 하위 프로세스가 상속 받는 항목은 기본값, 특권, 기호, 논리 이름, 제어 문자, 메시지 형식, 확인 상태, 키 정의 등입니다. 이러한 항목들은 집합적으로 하위 프로세스에 대한 환경을 만듭니다.
상위 프로세스로부터 상속되지 않는 항목은 다음과 같습니다.
만든 각각의 하위 프로세스에 고유한 PID 번호를 시스템에서 할당합니다.
기본적으로 하위 프로세스 이름은 상위 프로세스의 이름과 밑줄 및 정수로 구성됩니다. SPAWN 명령의 /PROCESS 한정자를 사용하여 기본값이 아닌 다른 프로세스 이름을 지정합니다. 프로세스 이름은 고유해야 합니다.
SET COMMAND 명령을 사용하여 상위 프로세스에서 정의한 명령은 하위 프로세스로 복사되지 않습니다. 만들어진 명령을 하위 프로세스에서 사용하려면 SET COMMAND를 사용하여 하위 프로세스에 대한 해당 명령을 만들어야 합니다.
사용자가 하위 프로세스를 생성하는 경우, 이 프로세스 컨텍스트에는 상위 프로세스의 특권은 포함되지만, 사용자가 사용할 수 있도록 인증된 특권은 포함되지 않습니다. 예를 들어, Mail을 실행하는 동안 하위 프로세스를 생성하고 특권이 있는 작업을 수행하려는 경우, Mail을 호출하려면 먼저 상위 프로세스에서 적절한 특권을 설정해야 합니다.
다음 SPAWN 명령 한정자를 사용하여 하위 프로세스에 이러한 많은 항목들이 상속되는 것을 방지할 수 있습니다.
|
|
|
/CARRIAGE_CONTROL, /PROMPT
|
|
|
|
CLI(명령 언어 인터프리터, 기본값: DCL)
|
|
|
|
|
|
|
|
|
|
/SYMBOL 및 /LOGICAL_NAMES 한정자는 시스템 정의 기호($SEVERITY와 $STATUS 등) 또는 시스템 정의 논리 이름(SYS$COMMAND와 SYS$OUTPUT 등)에 영향을 미치지 않습니다.
논리 이름과 기호를 하위 프로세스에 복사하는 데는 시간이 많이(몇 초 정도) 걸리므로, 하위 프로세스에서 논리 이름이나 기호를 사용하지 않으려는 경우에는 SPAWN 명령에 /NOLOGICAL_NAMES 및 /NOSYMBOL 한정자를 사용하려고 할 수도 있습니다. 하위 프로세스를 자주 사용할 경우에는 ATTACH 명령을 사용하는 것이 하위 프로세스를 시작하고 종료하기 위한 가장 효과적인 방법입니다. 이 방법을 사용하면 시스템에서 새로운 하위 프로세스를 만들 때까지 반복해서 기다리지 않고 상위 프로세스와 하위 프로세스 간에 제어권을 신속하게 전송할 수 있습니다.
가상 터미널은 사용할 수 있지만 모뎀 회선 연결이 끊긴 경우, 프로세스는 시스템에서 연결이 끊긴 가상 터미널 프로세스로 활성화된 상태로 유지됩니다. 사용자는 시스템 관리자가 지정한 시간(기본값은 900초 또는 15분) 안에 프로세스에 다시 연결해야 합니다. 이 시간이 만료될 때까지 프로세스에 다시 연결하지 못하면 시스템에서 이 프로세스를 삭제합니다.
주) UIC(사용자 식별 코드)에 관련된 가상 터미널 프로세스에만 연결할 수 있습니다.
다음과 같은 상황에서는 터미널의 연결이 끊길 수 있습니다.
호스트와 터미널 간의 모뎀 신호가 손실됩니다.
TT2$M_SECURE 특성 집합을 사용하여 터미널의 BREAK 키를 누릅니다.
DCL 명령 DISCONNECT를 입력합니다.
DCL 명령 CONNECT/CONTINUE를 입력합니다.
프로세스의 연결이 끊긴 경우 이전 프로세스에 다시 연결하여 연결이 끊기기 전의 상태로 돌아가는 옵션을 사용할 수 있습니다. 로그인을 하면 시스템에서 다음과 같은 메시지를 표시합니다.
You have the following disconnected process:
Terminal Process name Image name
VTA52: RWOODS (none)
Connect to above listed process [YES]:
Return 키를 누르거나 Yes를 입력하면 마치 DCL 명령 CONNECT/CONTINUE의 자동 실행이 수행된 것처럼 현재 프로세스에서 로그아웃됩니다. No를 입력하는 경우 또는 응답을 너무 오래 연기하여 응답 시간 초과가 발생하는 경우에는 새 프로세스에 로그인된 상태로 유지됩니다. 이전 프로세스에는 연결할 수 없게 됩니다.
연결이 끊긴 세션이 여러 개 있는 경우 다시 연결할 가상 터미널의 이름을 입력하라는 메시지가 표시됩니다. 표시된 세션 중 어느 것에도 연결하지 않으려면 No를 입력합니다.
일정 시간이 지나면 시스템에서 연결이 끊긴 프로세스를 자동으로 제거합니다. 그러나 다음과 같이 연결이 끊긴 프로세스에서 바로 로그아웃하면 시스템 리소스를 보존할 수 있습니다.
|
|
|
|
|
DCL 명령 SHOW USERS를 입력하여 연결이 끊긴 다른 작업이 있는지 확인합니다.
|
|
|
DCL 명령 CONNECT/LOGOUT을 입력하여 현재 프로세스에서 로그아웃합니다. 존재하는 마지막 프로세스에 도달할 때까지 각각의 관련 가상 터미널(터미널 접두사 VTA로 표시됨)을 통해 다시 연결합니다.
|
|
|
|
가상 터미널을 사용하면 한 번에 연결이 끊긴 프로세스를 두 개 이상 유지 보수할 수 있습니다. 그러나 가상 터미널에 로그인된 동안에는 물리적 터미널의 연결이 끊겨 있음을 염두에 두어야 합니다. 현재 가상 터미널 프로세스에 연결된 물리적 터미널 외의 다른 장치로 보내지는 모든 I/O 요청은 대기 상태에 들어갑니다. 시간 초과 기간이 만료되면 지연 중인 프로세스가 종료됩니다. 그러나 I/O 요청을 받을 물리적 터미널에 다시 연결하면 대기 중 상태에 들어간 지점에서 프로세스가 계속됩니다. 해당 컨텍스트에 관련된 이름으로 각 프로세스를 명명하면 원하는 프로세스에 쉽게 다시 연결할 수 있습니다.
예를 들어, 파일 편집을 위해 프로세스를 실행하는 SMITH라는 사용자는 SET PROCESS/NAME 명령을 사용하여 프로세스를 SMITH_EDIT로 명명할 수 있습니다. SMITH는 나중에 편집을 계속하기 위한 적절한 프로세스를 쉽게 확인할 수 있습니다.
시스템 관리자는 시스템에서 또는 터미널 단위로 가상 터미널의 사용을 제한할 수 있습니다.
일괄 처리 작업은 비대화형 프로세스입니다. 일괄 처리 작업은 자체 프로세스에서 실행되므로 서로 다른 작업을 수행하는 프로세스가 동시에 두 개 이상 있을 수 있습니다. 예를 들어, 다음과 같은 작업을 하는 데 일괄 처리 작업을 사용할 수 있습니다.
시스템에서 프로그램이나 명령 프로시저를 일괄 처리 모드로 실행하는 동안 작업을 대화형으로 수행합니다.
실행하는 데 시간이 오래 걸리는 명령 프로시저를 실행합니다.
명령 프로시저나 프로그램을 정규 업무 시간 이후에 실행합니다.
특정 프로그램의 우선 순위를 낮추어서 실행합니다(예: 프로그램에서 적절하지 않은 양의 시스템 리소스를 사용하는 경우).
일괄 처리 작업을 제출하면 시스템에서 사용자의 계정과 프로세스 특성을 사용하여 분리된 프로세스를 만듭니다. 시스템은 해당 프로세스로부터 작업을 실행하고 작업이 완료되면 프로세스를 삭제합니다. 또한 시스템 로그인 명령 프로시저(SYLOGIN.COM)와 사용자의 로그인 명령 프로시저(LOGIN.COM)를 실행한 다음 일괄 처리 작업의 명령 프로시저도 실행합니다. 이러한 프로시저가 실행되면서 로그 파일에 출력이 기록됩니다. 일괄 처리 작업이 완료되면 로그 파일을 인쇄하거나 사용자의 디렉토리 중 하나에 저장할 수 있습니다.
작업을 일괄 처리 모드로 실행하려면 DCL 명령 SUBMIT을 입력하여 작업을 일괄 처리 대기열(실행을 기다리고 있는 일괄 처리 작업의 목록)에 제출합니다. 작업을 제출하면 이 작업은 기본 일괄 처리 대기열인 SYS$BATCH로 보내집니다. 여기서 실행되기를 기다리고 있는 작업 대기열의 끝에 추가됩니다. 해당 작업은 이 작업의 앞에 있는 작업들이 완료되면 실행됩니다. OpenVMS 시스템에서는 동시에 실행될 수 있는 일괄 처리 작업의 개수가 시스템 관리자가 일괄 처리 대기열을 만들 때 지정됩니다. 기본적으로 SUBMIT 명령은 .COM 파일 유형을 사용합니다.
다음 보기에서는 JOB1.COM을 SYS$BATCH에 넣습니다.
$ SUBMIT JOB1
Job JOB1 (queue SYS$BATCH, entry 651, started on SYS$BATCH)
시스템에서 작업의 이름, 작업이 포함된 대기열, 작업에 할당된 항목 번호 등을 표시합니다. 작업이 일괄 처리 대기열에 제출된 후 DCL 프롬프트가 나타납니다. DCL 명령(예: DELETE/ENTRY)에서 일괄 처리 작업을 참조해야 할 경우에는 작업 항목 번호를 사용합니다. SHOW ENTRY 명령을 사용하면 작업 항목 번호를 얻을 수 있습니다. 여러 프로시저가 하나의 일괄 처리 작업으로 제출되는 경우, 어느 한 프로시저가 오류 또는 치명적인(심각한) 시스템 메시지와 함께 끝나면 해당 일괄 처리 작업이 종료됩니다.
일괄 처리 작업은 일괄 처리 대기열로 제출될 때 반드시 실행이 시작되어야 하는 것은 아닙니다. 다른 시간을 지정하려면 SUBMIT/AFTER 명령을 입력합니다. 다음 보기에서는 작업이 11:30
P.M. 후에 제출됩니다.
$ SUBMIT/AFTER=23:30 JOB1.COM
일괄 처리 실행을 위해 명령 프로시저를 제출하면 시스템에서 버전 번호를 비롯한 해당 명령 프로시저에 대한 전체 파일 지정을 저장합니다. 명령 프로시저를 제출한 후 업데이트할 경우, 일괄 처리 작업은 새 버전이 아니라 제출한 명령 프로시저의 버전을 실행합니다.
사용자의 로그인 기본값은 일반적으로 명령 프로시저에서 나온 파일을 액세스하는 데 필요한 기본값이 아니므로, 다음 방법 중 하나를 사용하여 정확한 파일이 액세스되도록 해야 합니다.
전체 파일 지정 사용 - 명령 프로시저의 파일을 참조하거나 명령 프로시저에 파일을 전달하는 경우 장치 및 디렉토리 이름을 파일 지정의 일부로 포함합니다.
SET DEFAULT 명령 사용 - 명령 프로시저의 파일을 참조하려면 명령 프로시저의 시작 부분에서 SET DEFAULT 명령을 사용하여 적절한 장치와 디렉토리를 지정합니다.
일괄 처리 작업이 실행되면서 로그 파일에 출력이 기록됩니다. 기본적으로 로그 파일 이름은 파일 유형 .LOG로 제출한 명령 프로시저와 동일합니다. 작업이 완료되면 시스템에서 로그 파일을 인쇄하고 사용자 디렉토리에서 이 파일을 삭제합니다. 로그 파일 저장에 대한 자세한 내용은
일괄 처리 작업 출력 제어를 참조하십시오.
로그인 명령 프로시저에서 일괄 처리 작업 검사
일괄 처리 작업을 제출할 때마다 시스템에서 사용자의 로그인 명령 프로시저를 실행합니다. 일괄 처리 작업을 테스트하는 데 F$MODE 렉시칼 함수를 사용하여 일괄 처리 작업을 실행하는 경우 로그인 명령 프로시저의 섹션이 포함되거나 생략되도록 할 수 있습니다.
다음 보기의 로그인 명령 프로시저는 일괄 처리 작업에만 사용되는 명령, 논리 이름 및 기호를 포함합니다. 섹션에는 BATCH_COMMANDS라고 표시되고 로그인 명령 프로시저의 시작 부분에 다음 명령이 포함됩니다.
IF F$MODE() .EQS. "BATCH" THEN GOTO BATCH_COMMANDS
일괄 처리 작업을 제출할 때 시스템에서 로그인 명령 프로시저의 어떤 명령도 실행하지 못하도록 하려면 프로시저의 시작 부분에 다음 명령을 넣습니다.
IF F$MODE() .NES. "INTERACTIVE" THEN EXIT
로그인 명령 프로시저의 어느 위치에든 이 명령을 둘 수 있습니다. 일괄 처리 작업을 제출하면 시스템에서 이전 명령이 있는 지점까지만 로그인 명령 프로시저를 실행합니다.
SUBMIT 명령을 입력하는 경우 하나의 작업에서 실행할 명령 프로시저를 여러 개 지정할 수 있습니다. /NAME 한정자를 사용하여 이름을 지정하지 않을 경우, SUBMIT 명령은 첫 번째 명령 프로시저의 이름을 작업 이름으로 사용합니다. 오류로 인해 작업에 있는 어느 한 명령 프로시저라도 종료되면 전체 작업이 종료됩니다.
일괄 처리 작업이 실행되는 경우, 첫 번째 프로시저(UPDATE.COM)의 작동 컨텍스트가 두 번째 프로시저(SORT.COM)용으로 보존되지 않습니다. 시스템에서 SORT.COM이 실행되기 전에 UPDATE.COM이 만든 로컬 기호를 삭제하지만 전역 기호는 보존됩니다.
단일 작업 내에서 개별 명령 프로시저에 대해 서로 다른 매개 변수를 지정할 수 없습니다.
다음 보기에서는 SUBMIT 명령이 UPDATE.COM을 실행한 다음 SORT.COM을 실행하는 일괄 처리 작업을 만듭니다.
$SUBMIT UPDATE,SORT
Job UPDATE (queue SYS$BATCH, entry 207) started on SYS$BATCH
다음 보기에서는 UPDATE.COM과 SORT.COM에 동일한 두 개의 매개 변수를 전달합니다.
$ SUBMIT UPDATE, SORT/PARAMETERS = -
_$ (DISK1:[ACCOUNT.BILLS]DATA.DAT, DISK2:[ACCOUNT]NAME.DAT)
$ Job UPDATE (queue SYS$BATCH, ENTRY 208) started on SYS$BATCH
일괄 처리 작업에 대한 기본 입력 스트림(SYS$INPUT)은 실행되고 있는 명령 프로시저입니다. 분리된 프로세스가 일괄 처리 작업을 실행 중인 경우, 대화형으로 실행하는 명령 프로시저로 재정의할 수 있는 것과 같이 터미널에 대해 SYS$INPUT을 재정의할 수 없습니다. 일괄 처리 작업에 입력을 전달하려면 다음 방법 중 하나를 사용합니다.
데이터를 명령 프로시저에 포함하려면 명령 또는 이미지 다음 행에 데이터를 넣습니다.
일시적으로 SYS$INPUT을 파일로 정의합니다.
일시적으로 SYS$INPUT을 파일로 정의하려면 DEFINE/USER_MODE 명령을 사용합니다.
명령 프로시저를 실행하기 위해 제출할 때 명령 프로시저에 매개 변수를 전달합니다.
명령 프로시저에 매개 변수를 전달하려면 일괄 처리 작업을 제출할 때 /PARAMETERS 한정자를 사용합니다.
단일 작업 내에서 개별 명령 프로시저에 대해 서로 다른 매개 변수를 지정할 수 없습니다. 다른 매개 변수 그룹을 전달해야 할 경우에는 별도의 SUBMIT 명령을 사용합니다.
다음 보기에서는 AVERAGE.EXE 이미지에 데이터 줄을 전달합니다.
$! Execute AVERAGE.EXE
$ RUN AVERAGE
647
899
532
401
$ EXIT
다음 보기에서는 SYS$INPUT이 일시적으로 파일로 정의됩니다.
$ DEFINE/USER_MODE SYS$INPUT STATS.DAT
$ RUN AVERAGE
$ EXIT
다음 보기에서는 EMPLOYEES.DAT 파일의 매개 변수가 CHECKS.DAT 명령 프로시저로 전달됩니다.
$ SUBMIT/PARAMETERS=(DISK1:[PAYROLL]EMPLOYEES.DAT) CHECKS
Job CHECKS (queue SYS$BATCH, entry 209) started on SYS$BATCH
주) SHOW QUEUE/FULL 명령은 일괄 처리 대기열의 작업에 대한 전체 정보를 표시합니다. 표시되는 정보에는 프로시저에 전달하는 매개 변수도 포함됩니다. 따라서 일괄 처리 작업에 암호와 같은 기밀 정보를 전달해서는 안 됩니다.
기본적으로 로그 파일은 일괄 처리 작업의 첫 번째 명령 프로시저와 이름이 동일하며 .LOG 파일 유형을 갖습니다. 시스템에서는 일괄 처리 작업의 출력을 매 분마다 한 번씩 로그 파일에 기록합니다. 시간 간격을 다르게 지정하려면 명령 프로시저에 SET OUTPUT_RATE 명령을 포함시킵니다.
시스템이 로그 파일에 기록하는 동안 EDT 편집기를 사용하여 로그 파일을 읽으려고 하면 다른 사용자에 의해 파일이 잠겨져 있다는 메시지가 나타납니다. 몇 초 정도 기다린 후 다시 시도하십시오. 그러나 EVE 편집기를 사용하면 일괄 처리 작업의 로그 파일을 읽을 수 있습니다. EDIT/TPU/READ_ONLY와 로그 파일 이름을 지정하면 EVE 명령을 사용하여 로그 파일을 이동하고 파일에 대해 변경한 내용이 저장되지 않도록 할 수 있습니다. /READ_ONLY 한정자를 생략하고 로그 파일을 어떤 식으로든 수정하면 일괄 처리 작업이 종료됩니다.
일괄 처리 작업은 사용자 이름으로 로그인하고 로그인 명령 프로시저를 실행하는 프로세스이므로, 일괄 처리 작업의 출력에는 로그인 명령 프로시저의 내용이 포함됩니다. 이 출력에는 일괄 처리 작업 로그 파일에 기록된 모든 것(명령 프로시저 출력, 오류 메시지 등)과 전체 로그아웃 메시지도 포함됩니다. 로그인 명령 프로시저가 일괄 처리 로그 파일에 기록되지 않게 하려면 로그인 명령 프로시저의 시작 부분에 다음 명령을 추가합니다.
$ IF F$MODE() .EQS. "BATCH" THEN SET NOVERIFY
기본적으로 로그 파일 이름은 작업을 제출하는 데 사용한 이름입니다. 또한 기본적으로 로그 파일에는 파일 유형 .LOG와 로그인 기본값으로 지정된 장치와 디렉토리가 있습니다. 작업을 제출할 때 다른 로그 파일 이름을 지정하려면 SUBMIT 명령에 /LOG_NAME 한정자를 사용합니다.
일괄 처리 작업 로그 파일에는 SYS$OUTPUT과 SYS$ERROR에 대한 모든 출력이 포함됩니다. 또한 명령 프로시저에서 실행된 모든 명령행도 기본적으로 포함됩니다. 명령행이 인쇄되지 않도록 하려면 명령 프로시저에서 SET NOVERIFY 명령 또는 F$VERIFY 렉시칼 함수를 사용합니다. 작업이 완료되면 시스템에서 긴 양식의 시스템 로그아웃 메시지를 사용하여 작업 종료 정보를 로그 파일에 기록합니다.
SET VERIFY 명령이 실행되고 있는 경우 SET PREFIX 명령을 사용하여 각 명령행에
time-stamp를 지정하여 각 명령이 실행되는 시기를 정확하게 알 수도 있습니다.
일괄 처리 작업이 성공적으로 완료되지 못하면 로그 파일을 점검하여 명령 프로시저가 실패한 지점과 이 실패를 초래한 오류 상태를 확인할 수 있습니다.
로그 파일을 저장하려면 /KEEP 또는 /NOPRINTER 한정자를 사용합니다. /KEEP 한정자는 로그 파일을 인쇄한 후 이 파일을 저장합니다. /NOPRINTER 한정자는 로그를 인쇄하지 않은 상태로 저장합니다. 이 두 한정자를 어느 것도 지정하지 않으면 기본 작업이 수행됩니다. 로그 파일이 기본 인쇄 대기열 SYS$PRINT에 대해 대기되고 인쇄된 후 삭제됩니다. /KEEP과 /NOPRINTER 한정자는 기본 로그인 디렉토리에 로그 파일을 저장합니다. 로그 파일은 일괄 처리 작업의 첫 번째 명령 프로시저와 동일한 이름과 파일 유형 .LOG를 갖습니다. 대체 파일 이름과 디렉토리 이름 중 하나 또는 둘 다를 지정하려면 /LOG_FILE 한정자를 사용합니다. 로그 파일 이름을 바꾸어 저장하려면 /LOG_FILE과 함께 /KEEP 또는 /NOPRINTER 중 하나를 사용해야 합니다.
다음 보기에서는 로그 파일이 DISK2:[JONES.RESULTS]UPDATE.LOG라는 파일에 저장됩니다.
$ SUBMIT/LOG_FILE=DISK2:[JONES.RESULTS]/NOPRINTER -
_$ DISK2:[JONES.RESULTS]UPDATE
TYPE 명령을 사용하여 로그 파일을 읽으면 일괄 처리 작업이 얼마나 완료되었는지 확인할 수 있습니다. 그러나 시스템에서 로그 파일에 기록 중인 동안에 로그 파일을 표시하려고 시도하면 다른 사용자에 의해 파일이 잠겨져 있다는 메시지가 나타납니다. 이 메시지가 나타나면 몇 초 정도 기다린 후 다시 시도하십시오.
일반적으로 프로그램을 컴파일하고, 링크로 연결하고, 실행하는 일괄 처리 작업 명령 프로시저는 컴파일러 목록이나 링커 맵 같은 추가적인 인쇄 출력을 만듭니다. 이러한 파일에 대한 인쇄 복사본을 만들기 위해, 일괄 처리 작업 명령 프로시저가 해당 파일을 인쇄하는 데 필요한 PRINT 명령을 포함할 수 있습니다.
컴파일러의 인쇄 목록 또는 링커 출력 파일 등 명령 프로시저의 모든 출력을 일괄 처리 작업 로그에 포함시키려는 경우, 다음 중 하나를 수행할 수 있습니다.
명령 프로시저에서 PRINT 명령 대신 TYPE 명령을 사용합니다. TYPE 명령은 SYS$OUTPUT에 기록합니다. 일괄 처리 작업에서 SYS$OUTPUT은 일괄 처리 작업 로그 파일에 해당합니다.
적절한 명령에 대해 한정자를 사용하여 출력을 SYS$OUTPUT으로 지정합니다.
이 방법을 사용하는 경우 로그 파일을 저장하지 않으면 출력 파일이 디스크에 저장되지 않습니다.
다음 보기에 나오는 명령 프로시저의 처리가 완료되면 일괄 처리 작업 로그, 컴파일러 목록, 링커 맵 등 별도의 출력 세 개가 만들어집니다.
$ FORTRAN/LIST BIGCOMP
$ PRINT BIGCOMP.LIS
$ LINK/MAP/FULL BIGCOMP
$ PRINT BIGCOMP.MAP
다음 보기에서는 한정자를 사용하여 SYS$OUTPUT으로 출력을 지정하는 방법을 보여 줍니다.
$ FORTRAN/LIST=SYS$OUTPUT BIGCOMP
$ LINK/MAP=SYS$OUTPUT/FULL BIGCOMP
이러한 명령이 일괄 처리 작업으로 실행되면 컴파일러와 링커의 출력 파일은 로그 파일에 직접 기록됩니다.
작업을 대기열에 제출했지만 이 작업 실행이 시작되기 전에는 SET ENTRY 또는 SET QUEUE/ENTRY 명령을 적절한 한정자와 함께 사용하여 해당 작업에 관련된 특성을 변경할 수 있습니다.
다음 보기에서는 일괄 처리 대기열에서 보류 중인 일괄 처리 작업 이름을 변경할 수 있는 두 가지 방법을 보여 줍니다.
$ SET QUEUE/ENTRY=209/NAME=NEW_NAME SYS$BATCH
$ SET ENTRY 209 /NAME=NEW_NAME
이 두 명령은 모두 작업 번호 209의 이름을 NEW_NAME으로 변경합니다.
다음 목록에는 SET ENTRY 또는 SET QUEUE/ENTRY 명령으로 변경할 수 있는 일부 사항들이 있습니다. 전체 한정자 목록을 보려면
OpenVMS DCL Dictionary를 참조하십시오. 또한, SUBMIT 명령에 사용할 수 있는 대부분의 한정자는 SET ENTRY와 SET QUEUE/ENTRY 명령과 사용할 수 있습니다.
다음과 같은 변경 작업을 수행할 수 있습니다.
/AFTER 한정자를 사용하여 작업이 실행될 때까지 대기하는 시간을 지정합니다. /HOLD 한정자를 사용하여 명시적으로 해제할 때까지 작업을 중지합니다.
/NOHOLD 또는 /RELEASE 한정자를 사용하여 /HOLD 또는 /AFTER 한정자와 함께 제출된 작업을 릴리즈합니다.
/REQUEUE 한정자를 사용하여 작업이 실행될 대기열을 변경합니다.
작업 집합 기본값, 작업 집합 범위, 작업 집합 크기, 작업 일정 우선 순위, CPU 시간 제한과 같은 실행 특성을 변경합니다.
/PARAMETERS 한정자를 사용하여 매개 변수를 변경합니다.
다음은 일괄 처리 작업 특성을 제어하기 위해 SUBMIT 명령으로 지정할 수 있는 한정자입니다. 작업 집합 기본값, 작업 집합 범위, 작업 집합 크기, 작업 일정 우선 순위, CPU 시간 제한과 같은 실행 특성도 지정할 수 있습니다.
일괄 처리 작업이 실행될 때까지 대기하는 시간을 지정합니다. 지정된 시간까지는 작업이 일괄 처리 대기열에 남아 있게 됩니다. 명시적으로 해제할 때까지 대기열의 작업을 중지하려면 /HOLD 한정자를 사용합니다. 중지되고 있는 작업을 해제하려면 SET ENTRY/RELEASE 명령을 사용합니다.
일괄 처리 작업의 이름을 지정합니다. 이 이름을 지정하지 않으면 작업의 첫 번째 또는 유일한 명령 프로시저의 파일 이름이 작업 이름으로 사용됩니다.
SHOW QUEUE/FULL 명령에 대한 표시의 일부로 나타날 메시지 문자열을 지정합니다. 작업에 대한 정보를 운영자나 시스템 관리자에게 전달할 수 있습니다.
작업 완료에 대한 알림을 요청합니다. 일괄 처리 작업 실행이 완료되면 시스템이 사용자 터미널에 메시지를 보냅니다.
일괄 처리 작업을 SYS$BATCH가 아닌 다른 대기열로 보냅니다. 원격 노드에 있는 명령 프로시저를 실행하려면 /REMOTE 한정자를 사용합니다. 이 한정자는 작업을 원격 노드의 SYS$BATCH로 보냅니다.
작업이 실행되는 동안 시스템에 오류가 발생하는 경우 작업을 다시 시작할 수 있게 합니다.
일괄 처리 작업이 완료된 후에도 그 작업을 대기열에 계속 둡니다. SHOW QUEUE 또는 SHOW ENTRY 명령을 사용하여 작업의 완료 상태를 볼 수 있습니다.
작업이 일괄 처리 작업 대기열에 들어오면 SHOW ENTRY 명령 또는 SHOW QUEUE 명령을 사용하여 작업의 상태를 모니터링할 수 있습니다. 대기열에 작업이 없으면 시스템에서 다음 메시지를 표시합니다.
$ SHOW QUEUE BOSTON_BATCH
Batch queue BOSTON_BATCH, on BOSTON::
작업에 대한 전체 정보를 보려면 SHOW ENTRY 또는 SHOW QUEUE 명령과 함께 /FULL 한정자를 사용합니다. 대기열의 다른 작업 상태를 보려면 SHOW QUEUE/ALL 명령을 사용합니다.
다음 보기에서는 항목 번호 999가 표시됩니다.
$ SUBMIT EXCHAN.DAT
Job EXCHAN (queue SYS$BATCH entry 999) started on SYS$BATCH
$ SHOW ENTRY 999
Entry Jobname Username Blocks Status
----- ------- -------- ------ ------
999 EXCHAN BLASS 3 Executing
On batch queue SYS$BATCH
$ SUBMIT/NOPRINTER/PARAMETER=STATS.DAT UPDATE
Job UPDATE (queue SYS$BATCH entry 1080) started on BOSTON_BATCH
$ SHOW QUEUE BOSTON_BATCH
Batch queue BOSTON_BATCH on BOSTON::
Entry Jobname Username Blocks Status
----- ------- -------- ------ ------
1080 UPDATE ODONNELL 36 Executing
다음 보기에서 /FULL 한정자는 작업 번호 999에 관련된 특성과 BOSTON_BATCH에 대한 통계를 표시합니다.
$ SHOW ENTRY/FULL 999
Entry Jobname Username Blocks Status
----- ------- -------- ------ ------
999 EXCHAN BLASS 3 Executing
On batch queue BOSTON_BATCH
Submitted 11-DEC-1999 13:12 /PRIORITY=100
WRKD:[BLASS]EXCHAN.DAT;3
$ SHOW QUEUE/FULL BOSTON_BATCH
Batch queue BOSTON_BATCH, on BOSTON::
/BASE_PRIORITY=3 /JOB_LIMIT=5 /OWNER=[EXEC] /PROTECTION=(S:E,O:D,G:R,W:W)
Entry Jobname Username Blocks Status
----- ------- -------- ------ ------
1080 UPDATE ODONNELL 36 Executing
Submitted 11-DEC-1999 10:46 /KEEP /PARAM=('STATS.DAT') /NOPRINTER /PRIO=4
_BOSTON$DQA2:[ODONNELL]TEMP.COM;1 (executing)
다음 보기에서는 SHOW QUEUE/ALL 명령을 사용하여 BOSTON_BATCH 대기열의 모든 작업을 표시합니다.
$ SHOW QUEUE/ALL BOSTON_BATCH
Batch queue BOSTON_BATCH on BOSTON::
Entry Jobname Username Status
----- ------- -------- ------
923 no privilege Executing
939 no privilege Holding until 11-DEC-1999 19:00 1080 UPDATE ODONNELL Executing
특권 있는 사용자가 아닌 경우 이 정보는 자신의 계정으로 제출한 작업에 대해서 제한됩니다.
실행 전이나 실행 중에 일괄 처리 작업을 삭제할 수 있습니다. 일괄 처리 대기열에서 보류 중이거나 이미 실행 중인 항목을 삭제하려면 DELETE/ENTRY 명령을 사용합니다. 사용자가 직접 제출하지 않은 작업을 삭제하기 위해서는 특별한 특권이 필요합니다. DELETE/ENTRY 명령으로 인해 작업이 종료되면 로그 파일이 인쇄되지도 않고 디렉토리에서 삭제되지도 않습니다.
DELETE/ENTRY 명령을 사용하여 작업을 종료하는 경우 운영 체제의 정상적인 작업 종료 활동이 우선하기 때문에 비정상적인 종료로 처리됩니다. 따라서 일괄 처리 작업 로그에는 작업 시간과 계정 정보가 요약된 표준 로그아웃 메시지가 포함되지 않습니다. 그러나 명시적인 EXIT 명령이나 STOP 명령 또는 이 두 명령 중 하나에 대한 암시적인 실행으로 인한 종료(현재의 ON 조건의 결과)는 정상적인 종료로 간주됩니다. 운영 체제는 정상적인 종료 후 적절한 축소 및 계정 프로시저를 수행합니다.
다음 명령은 SYS$BATCH에서 작업 항목 210을 삭제합니다.
$ DELETE/ENTRY=210 SYS$BATCH
일괄 처리 작업이 실행되는 동안 시스템에 오류가 발생하면 작업이 완료되지 않습니다. 시스템이 복구되고 대기열이 다시 시작되면 해당 작업은 중단되고 대기열의 다음 작업이 실행됩니다. 그러나 일괄 처리 작업을 제출할 때 /RESTART 한정자를 지정하면 작업이 완료되기 전에 시스템에 오류가 발생하는 경우 시스템에서 이 작업이 다시 실행되도록 할 수 있습니다.
기본적으로 일괄 처리 작업은 첫 행부터 다시 실행됩니다. 다시 시작할 지점을 다르게 지정하기 위해 명령 프로시저에 추가할 수 있는 기호에 대한 자세한 내용은
13장과
14장을 참조하십시오.
시스템 오류로 인해 작업을 다시 시작하는 것 외에도 사용자가 작업을 명시적으로 중지한 후에도 작업을 다시 시작할 수 있습니다. 작업을 중지했다가 동일한 대기열이나 다른 대기열에서 이 작업을 다시 시작하려면 STOP/QUEUE/REQUEUE/ENTRY 명령을 사용합니다.
다음 보기의 명령은 SYS$BATCH의 212 작업을 중지했다가 SYS$BATCH로 다시 보냅니다.
$ STOP/QUEUE/REQUEUE/ENTRY=212 SYS$BATCH
이 명령을 입력하려면 SUBMIT 명령에 /RESTART 한정자를 사용하는 212 작업이 제출되어 있어야 합니다. 일괄 처리 작업이 두 번째로 실행될 때는 시스템에서 전역 기호 BATCH$RESTART를 사용하여 작업 실행을 시작할 위치를 확인합니다.
명령 프로시저 내에서 SYNCHRONIZE와 WAIT 명령을 사용하여 프로시저를 대기 상태로 둘 수 있습니다. SYNCHRONIZE 명령은 지정한 작업이 완료될 때까지 프로시저가 기다리도록 합니다. WAIT 명령은 지정한 시간이 경과될 때까지 프로시저가 기다리도록 합니다.
SYNCHRONIZE 명령을 사용하여 작업 이름을 지정할 경우, 동기화할 작업은 해당 사용자 이름과 관련되어야 합니다. 작업은 그 작업을 제출하는 프로세스의 사용자 이름과 관련됩니다. 여러 사용자에 대한 작업을 동기화하려면 SYNCHRONIZE 명령과 함께 /ENTRY 한정자를 사용하여 작업 항목 번호를 지정해야 합니다.
다음 보기에서는 두 개의 작업이 협동적인 기능을 수행하기 위해 동시에 제출될 경우 한 작업에 다음과 같은 명령이 포함될 수 있습니다.
이 명령이 실행된 후 명령 프로시저는 작업 이름 BATCH25로 식별된 작업의 실행이 완료될 때까지는 실행을 계속할 수 없습니다.
이 SYNCHRONIZE 명령은 454 작업이 완료될 때까지 현재 명령 프로시저를 대기 상태로 둡니다.
일괄 처리 작업 실행 동기화는 동시 실행을 위해 제출되었지만, 제대로 실행되기 위해 동기화되어야 하는 명령 프로시저 보기입니다. 각 프로시저는 큰 소스 프로그램을 컴파일합니다.
그림 16-1 일괄 처리 작업 실행 동기화
보기를 점검할 때는 다음 사항에 주의하십시오.
[1] 개별 SUBMIT 명령이 두 개의 별도 작업을 제출하는 데 필요합니다. 첫 번째 프로세스가 만들어집니다.
[2] FORTRAN 명령이 실행된 후 SYNCHRONIZE 명령이 실행됩니다. 315 작업이 수행 중이거나 보류 중인 경우, 314 작업은 다음 명령을 실행하지 않습니다.
[3] 315 작업의 실행이 완료되면 다음 명령과 함께 314 작업이 계속됩니다.
WAIT 명령은 디스크나 테이프 드라이브 같은 공유 시스템 리소스에 대한 액세스 권한이 있어야 하는 명령 프로시저에 유용합니다.
다음 보기에서는 테이프 드라이브의 할당을 요청하는 프로시저를 보여 줍니다.
$ TRY:
$ ALLOCATE DM: RK:
$ IF $STATUS THEN GOTO OKAY
$ WAIT 00:05
$ GOTO TRY
$ OKAY:
$ REQUEST/REPLY/TO=DISKS -
"Please mount BACK_UP_GMB on ''F$TRNLNM("RK")'"
WAIT 명령이 성공적으로 완료되지 않으면 프로시저 자체가 대기 상태로 됩니다. 5분 후 요청을 다시 시도합니다.
ALLOCATE 요청 다음에 오는 IF 명령은 $STATUS의 값을 확인합니다. $STATUS의 값이 성공적인 완료를 나타낼 경우 명령 프로시저는 계속됩니다. 그렇지 않은 경우에는 프로시저가 WAIT 명령을 실행합니다. WAIT 명령은 시간 간격을 5분으로 지정합니다. 5분을 기다린 후 다음 명령인 GOTO가 실행되고 요청이 반복됩니다. 이 프로시저는 성공할 때까지 또는 일괄 처리 작업이 삭제되거나 중지될 때까지 장치 할당을 위한 반복과 시도를 계속합니다.