SETPGID(2)

이름
setpgid, getpgid, setpgrp, getpgrp - 프로세스 그룹을 설정하거나 알아낸다.

사용법
#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
int setpgrp(void);
pid_t getpgrp(void);

설명
setpgid는 pid로 설정된 프로세스의 프로세스 그룹 ID를 pgid로 설정한다. 만일 pid가 0이라면, 현재 프로세스의 프로세스 ID가 사용된다. 만일 pgid가 0이라면, pid로 지정된 프로세스의 프로세스 ID가 사용된다. 만일 setpgid를 프로세스 그룹에서 다른 프로세스 그룹으로 프로세스를 옮기는데 사용하려면 (파이프를 만들 때 몇몇 쉘이 하는 것처럼), 두 프로세스 그룹은 같은 세션의 속해있어야 한다. 이런 경우, pgid는 연계된 프로세스 그룹을 지정해야 하며 그 그룹의 세션 ID는 연계된 프로세스의 세션 ID와 일치해야 한다. getpgid는 pid로 지정된 프로세스의 프로세스 그룹 ID를 리턴한다. 만일 pid가 0이라면, 현재 프로세스의 프로세스 ID가 사용된다. 리눅스 DLL 4.4.1 라이브러리에서, setpgrp는 단순히 setpgid(0,0)를 호출한다. getpgrp는 getpgid(0)와 동일하다. 각 프로세스 그룹은 세션의 일원이며, 각 프로세스는 그 프로세스 그룹이 일원인 세션의 일원이다. 프로세스 그룹들은 시그널 전달과, 그리고 터미널에 의해서 입력 요구들을 조정한다: 터미널 같이 같은 프로세스 그룹의 프로세스들은 전경(foreground)으로 동작하며 읽을 것이다. 그러는 동안 다른 프로세스가 읽으려고 한다면 시그널에 의해 멈출 것이다. 이 시스템 콜들은 작업 제어(job control)를 위해 프로세스 그룹들을 만드는 csh(1) 같은 프로그램에 의해 사용된다. termios(4)에서 기술된 TIOCGPGRP와 TIOCSPGRP는 제어 터미널의 프로세스 그룹을 알아내거나 설정하기 위해 사용된다. 세션이 제어 터미널 가지고, CLOCAL은 설정되지 않으며 hangup이 발생하면, 세션 리더(leader)는 SIGHUP을 받는다. 만일 세션 리더가 종료하면, SIGHUP 시그널은 제어 터미널의 전경 프로세스 그룹에 있는 모든 프로세스에게 보내진다. 만일 프로세스 종료가 어떤 프로세스 그룹을 고아로 만든다면, 그리고 새롭게 고아가 된 프로세스 그룹의 어떤 프로세스가 멈춘다면, SIGHUP 시그널에 이어서 SIGCONT 시그널이 새롭게 고아가 된 프로세스 그룹의 모든 프로세스에게 보내진다.

반환값
성공시, setpgid 와 setpgrp 는 0이 리턴된다. 에러시, -1이 리턴되며, errno는 적당한 값으로 설정된다. getpgid는 성공시 프로세스 그룹이 리턴된다. 에러시, -1이 리턴되며, errno는 적당한 값으로 설정된다. getpgrp는 항상 현재 프로세스 그룹이 리턴된다.

에러

EINVAL
    pgid 가 0보다 작다.

EPERM
    여러가지 허가권 위반.

ESRCH
    pid가 어떤 프로세스와도 일치하지 않는다.

호환
SVr4, POSIX, 4.4BSD.

호환
setpgid와 getpgrp은 POSIX.1 에서 잘 작동한다. setpgrp은 BSD 4.2에서 잘 작동한다. getpgid은 SVr4에서 잘 작동한다.

관련 항목
getuid(2), setsid(2), tcsetpgrp(3), termios(4)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 5월 2일