학교에서 쉘 만들라는 숙제가 나왔는데...
거의 다 완성단계인데.. 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