デーモンプロセスのデバッグ方法


デーモンプロセスのデバッグ方法
私はデーモンプロセスを書いたが、どのようにgdbでデバッグするか、attach pid方法を試したが、彼はプログラムを止めることができなかった.
デーモンプロセスのデバッグ方法
ctrl+cは止まりました
デーモンプロセスのデバッグ方法
realy?
デーモンプロセスのデバッグ方法
デーモンプロセスは通常daemonを通過します.Init()のような関数は、プロセスをデーモンプロセスに変換します.この変換コメントを通常のプロセスとしてデバッグし、デバッグしてからデーモンプロセスに変換できます.
デーモンプロセスのデバッグ方法
いいですね.今私はそうしていますが、あなたは知りません.のデーモンには他の特性があります.プログラムで大量の文字操作が行われ、画面の出力が多すぎるとオーバーフローします(最初はデーモンとして使いたくありませんでした).なぜデーモンの標準出力がオーバーフローしたのか知りたいです.彼はなぜ存在しないstdoutデバイスに出力する情報をメモリのアドレスに書いたのか.
デーモンプロセスのデバッグ方法
達人たちはどうやって調整して泣いたの?
デーモンプロセスのデバッグ方法
あら、これで泣いたの?
デーモンプロセスのデバッグ方法
実行中のデーモンは、gdbプロセスプログラム名プロセスプログラムpidを使用して、gdbでデバッグサブプロセスを実行した場合、gdbでコマンドを実行し、set follow-fork-mode childをデバッグできます.
デーモンプロセスのデバッグ方法
投稿ありがとうございました

 #include <unistd.h>
	#include <signal.h>
	#include <sys/param.h>
	#include <sys/types.h>
	#include <sys/stat.h>

   #include <stdio.h>
   #include <time.h>
void init_daemon(void);//         
main(){
	FILE *fp;
	time_t t;
	init_daemon();//    Daemon
	while(1)//      test.log      
	{
		sleep(2);//     
		if((fp=fopen("test.log","a"))>=0){
			t=time(0);
			fprintf(fp,"Im here at %sn",asctime(localtime(&t)) );
			fclose(fp);
		}
	
  }

}

void init_daemon(void)
	{
		int pid;
		int i;
		if(pid=fork())
			exit(0);//    ,     
		else if(pid<0)
			exit(1);//fork  ,  //      ,      
		setsid();//                  //        
		if(pid=fork())
			exit(0);//      ,       
		else if(pid<0)
			exit(1);//fork  ,  //      ,  //            
		for(i=0;i<NOFILE;++i)//          
			close(i);
		chdir("/cygdrive/e/tmp");//       /tmpumask(0);//        
		return;
	} 


	//nIm here at Tue Jan 11 12:21:06 2011