发信人: jalinsoo() 
整理人: wenbobo(2002-12-27 15:55:46), 站内信件
 | 
 
 
【 在 tjam (江南才子) 的大作中提到: 】
 : 【 在 girlrong (阿蓉) 的大作中提到: 】
 : :     因我对unix下的c编程一窍不通,板斧ken_qian极少来c版。又有网友反应c版
 : : 讨论unix下的c编程的文章太少,故征求板斧若干。要求熟悉unix下的c编程,且
 : : 愿意解答网友的相关问题,有空撰写有关unix下的c编程的文章。欢迎各位高手踊
 :    .......
 可惜我的时间不是很多,不然倒可以略尽绵力 
 下面送给大家一段将一个进程推入后台的代码吧 
 
 #include <signal.h>
 #include <errno.h>
 #include <sys/resource.h>
 
 
 /*-------------------------------------------------------------------- ----------
  * Detach a daemon process from login session controlling terminal
  *-------------------------------------------------------------------- ----------
  */
 
 int daemon_start()
 {
 	register int	childpid, fd;
 	struct rlimit	rl;
 
 	/*
 	 * If we were not started in the background, fork and
 	 * let the parent exit. This also guarantees the first child
 	 * is not a process group header.
 	 */
 
 	if ((childpid = fork()) < 0)
 		return(-1);
 	else if (childpid > 0)
 		exit(0);   /* parent */
 
 	/*
 	 * First child process.
 	 * Disassociate from controlling terminal and process group.
 	 * Ensure the process can't reacquire a new controlling terminal.
 	 */
 
 	if (setpgrp() < 0)   return(-1);
 
 	signal(SIGHUP,SIG_IGN);   /* immune from pgrp leader death */
 
 	if ((childpid = fork()) < 0)
 		return(-1);
 	else if (childpid > 0)
 		exit(0);   /* first child */
 
 	/*
 	 * Second child
 	 * Close any open file descriptors.
 	 */
 	getrlimit(RLIMIT_NOFILE, &rl);
 	for (fd=rl.rlim_cur; fd>=0 ; --fd)
 		close(fd);
 	errno = 0;   /* probably got set to EBADF from a close */
 
 	/*
 	 * Move the current directory to root, to make sure we
 	 * aren't on a mounted filesystem.
 	 */
 	chdir("/");
 
 	/*
 	 * Clear any inherited file mode creation mask.
 	 */
 	umask(0);
 
 	signal(SIGCLD,SIG_IGN);
 	
 	#ifdef SIGTTOU
         	signal(SIGTTOU,SIG_IGN);
         	signal(SIGTTIN,SIG_IGN);
         	signal(SIGTSTP,SIG_IGN);
 	#endif
         signal(SIGINT,SIG_IGN);
         signal(SIGTERM,SIG_IGN);
 
 
 	return(0);
 }
 
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.183.48]
  | 
 
 
 |