[질문] 쉘을 만드는데 백그라운드를 포어그란운드로 만들기

익명 사용자의 이미지

학교에서 쉘 만들라는 숙제가 나왔는데...

거의 다 완성단계인데.. job control단계에서 막히네요..

% find / -name linux &
[1] 23150
% fg
find / -name linux

즉, background job을 foreground job으로 변환하고.... 반대로 bg명령어
는

foreground process을 backgrond job으로 변경을 하는 쉘 자체에 내장된

built-in command입니다..

자세한 방법을 모르 겠습니다.. 아래와 같은 방법으로 구현을 하였는데...

우선 백그라운드로 작업을 돌리고, fg를 하면... 제가 만든 쉘의 프로세스
가

stop되면서 빠져나와 버리네요.. 백그라운드 작업으로 바뀌어 집니다..

stop된 제가 만들 쉘의 프로세스를 다시 foreground로 돌리면 다시 쉘이

실행됩니다.. 이때 백그라운드 돌렸던 프로세스는 kill된 상태이더군요..

int ctty;
pid_t fgpgrp; // foreground process group id

// ctermid();는 현재 프로세스의 tty의 디바이스 파일에 대한 파일 이름
을
// 리턴합니다.. "/dev/tty" 이런 값을 리턴하는 거죠..
ctty = open(ctermid(NULL), O_RDWR);
if((fgpgrp = tcgetpgrp(ctty)) < 0)
{
.
.
.

이런식으로 이 프로세스가 background인지 foreground인지 파악
합니다.
}

tcsetpgrp(ctty, background process's ID);

이렇게 하면 될 것 같은데..

누구 잘 아시는 분 알려주세요.... 중간고사도 있는데..

이것만 붙잡고 있을 수도 없고.. T.T