윈도우 프로그래밍에서 리눅스 프로그래밍으로 넘어 오면서 인상 깊었던 것 중 하나가 일반 프로그램을 Background로 간단히 실행 킬 수 있다는 점이었습니다. 윈도우 프로그램이라면 실행 시켜놓고 Tray Icon으로 숨기는 방법이 있습니다만, 정확히 처리한다면 윈도 서비스 프로그램으로 작성해야 할 것입니다.

 

내용이 옆 길로 새려고 하네요. 여하튼 유닉스나 리눅스에서는 프로그램을 실행할 때 "&" 문자를 붙여 줌으로써 간단히 Background 프로그램으로 실행 시켜 출 수 있습니다. 그러나 이것도 귀찮다고 하시는 고객이 있을지 모르겠습니다. 아니면 내 프로그램은 항상 Background로 실행해야 하는 Daemon 프로그램이라고 한다면 항상 Background로 실행되는 것이 좋겠습니다.

 

프로rm램을 Background로 실행 시키는 것도 간단한데, 프로그램 코딩에서 항상 Background로 실행하도록 하는 코딩 방법도 매우 간단하더군요. 바로 아래와 같습니다. fork()로 프로세스를 둘로 분리하는 것이죠. 결국 자신은 복사본을 맞들어 실행하게 하고 자신은 죽어 버리는 방법입니다. 간단하면서도 강력한 방법이 아닐 수 없습니다. ^^

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int	main( int argc,	char *argv[])
{
	int	n_count	= 0;
   	pid_t   pid	= -1;

   	pid  = fork();

	switch( pid)
   	{
      	case -1  :
      		printf( "자식 프로세스 생성 실패\n");
      	   	return -1;
      	case 0   :
      		printf( "project run!!\r\n!");
      		break;
      	default  :
      		exit( 0);
	}

   	while( 1 )
   	{
		printf( "count=%d\r\n", n_count++);
		sleep( 1);
   	}
}