[ CnUnix ] in KIDS 글 쓴 이(By): HellCat ((void*)0) 날 짜 (Date): 1994년08월10일(수) 22시33분02초 KDT 제 목(Title): [R] tty tty 를 setpgrp() 등으로 띠어 버렸을때 stdout 은 디폴트로 /dev/console 이 될꺼에요. 이건 제가 쓰는 프로그램의 일부인데....제 경우 콘솔로 보내지 않으려고 한거고.. 또 제가 만든 프로그램이 계속해서 child process 를 fork() & exec() 해야 하기 땜에.... 어쨌던..자세한건 말씀드리기 곤란하고 꼬진 코딩이지만..참고가 되었으면 합니다. if ((pid = fork()) < 0) { perror("fork"); exit(1); } if (pid > 0) { /* parent */ exit(0); } if (setpgrp() == -1) { perror("setpgrp"); exit(1); } sigset(SIGHUP, SIG_IGN); if ((child_pid = fork()) == -1) { perror("cannot fork second child"); exit(1); } if (child_pid > 0) { /* first child */ exit(0); } for (i = 0, nofile = getdtablesize(); i < nofile; i++) { close(i); } errno = 0; umask (002); if ((fd1 = open (NEWSTDOUT, (O_RDWR | O_CREAT | O_SYNC), 0660)) == -1) { perror("redirecting STDOUT for MASTER failed"); exit(1); } if (dup2(fd1, 1) == -1) { perror("dup2 for STDOUT for MASTER failed"); exit(1); } if ((fd2 = open (NEWSTDERR, (O_RDWR | O_CREAT | O_SYNC), 0660)) == -1) { perror("redirecting STDERR for MASTER failed"); exit(1); } if (dup2 (fd2, 2) == -1) { perror("dup2 for STDERR for MASTER failed"); exit(1); } --- if (t_snddis(KIDS[i].fd, (struct t_call *)NULL) == -1) { t_error("날 죽여라!!"); longjmp ((jmp_buf) HELL, -1); } |