2009-10-02 2 views
1

코스 할당의 일부로 자체 쉘을 작성하고 있습니다. 그래서 배경 작업을 지원해야합니다. 나는 직업 ID와 배경 작업에 대한 데이터 strutures을 유지 관리하고있다. 그러나 커널에 이것이 백그라운드 프로세스라는 사실을 알려줘야 만, 터미널 포 그라운드 프로세스가 하나만 존재합니다. 지금까지는 프로그램 수준에서 백그라운드 작업을 처리하고 있습니다.UNIX 백그라운드 프로세스를 등록하기위한 시스템 호출

백그라운드 프로세스를 등록하는 함수 호출은 무엇입니까? 데몬 기능에서 리눅스 모습에

+2

: http://www.win.tue.nl/~aeb/linux/lk/lk-10.html 내가 그것을 –

+0

중복의 교육의 길을 좋아 HTTP : //stackoverflow.com/questions/1509352/can-we-start-a-background-process-using-exec-giving-as-an-argument –

+0

@Jonathan, 그건 완전히 다릅니다. 이 사람은 직업 통제를 원하고 다른 질문은 데몬을 시작하려고합니다. 데몬은 터미널에서 연결이 끊어지고 사용자와 전혀 상호 작용하지 않습니다. –

답변

2

을, 가장 간단한 방법은 단순히 제공하는 것입니다 그것은 다른 그룹입니다.

switch (fork()) { 
    case 0: 
     setpgid(getpid(), getpid()); 
     execvp(...); 
내가 다른 일이 페이지를 읽고 있었다
1

:

int daemon(int nochdir, int noclose); 

데몬 기능을 사용하면 대신 setsid와 포크를 사용할 필요가 사용하고있는 시스템에 존재하지 않습니다.

+0

데몬 프로세스가 필요 없지만 백그라운드에서 프로세스를 실행하고 싶습니다. 커널을 알리는 방법이 필요합니다. – avd

1

죄송합니다. 질문을 잘못 읽었습니다. tcsetpgrp 기능을 사용해야합니다.

자세한 내용은 GNU C 라이브러리 매뉴얼에서이 섹션 읽기 : 당신이 터미널의 제어 그룹의 일부가 될 수 없습니다에 처리를 원하는 경우

http://www.gnu.org/s/libc/manual/html_node/Job-Control.html

관련 문제