본문 바로가기

컴퓨터

Linux system() 와 fork(), execl() 사용 // a.c #include int main() { printf("a : YoonByoungHoon\n"); return 0; } // b.c #include #include #include #include int main() { int status = 0; // system() 이용 - 쉘을 이용하기때문에 쉘환경에 종속적이어서 비효율적이다. pid_t parent, child; system("./a"); printf("system()\n"); // fork() and execl() - 쉘환경에 상관없이 자식 프로세스를 생성하여 실행할 수 있다. parent = fork(); switch(parent) { case -1: perror("fork failed."); break; case 0: execl(".. 더보기
프로세스 프로세스C/C++ 2009/03/10 17:00 프로세스 * 실행중인 프로그램을 말한다. ps -aux 를 통해 현재 실행중인 프로세스를 볼수 있다. init 프로세스 모든 프로세스는 pid를 가지고, 또한 ppid를가진다. pid 가 1인 프로세스가 init 프로세스다. init 프로세스는 사용자들을 위해서 시스템을 설정하게 된다. 모든 프로세스는 init으로 부터 fork & exec 과정을 거쳐 독립된 프로세스로 임무를 수행하게 된다. * init 프로세스가 하는일 * 파일 시스템의 구조 검사 * 파일 시스템의 마운트 * 서버 데몬을 띄운다. * 사용자로긴을 기다린다. * 사용자가 로긴하면 사용자를 위한 쉘을 띄운다. * init 이 처음 시작해서 수행해야할 작업들을 설정한 파일은 /etc/init.. 더보기
프로세스 입출력 popen 1장. popen(2) 차례 1.1절. 사용법 1.2절. 설명 1.3절. 반환값 1.4절. 에러 1.5절. 예제 프로세스 I/O 1.1절. 사용법 #include FILE *popen(const char *command, const char *type); int pclose(); 1.2절. 설명 popen 은 command 를 shell을 가동시켜서 열고 pipe(2)로 연결한다. pipe 는 기본적으로 단방향으로만 정의 되어 있음으로, 읽기전용 혹은 쓰기전용 으로만 열수 있으며, type 로 정의된다. popen 은 command 를 실행시키고 pip 연결을 위해서 내부적으로 fork() 와 pipe() 를 사용한다. command 는 실행쉘인 /bin/sh 에 -c 옵션을 사용하여서 전달되게 된다. .. 더보기
C Standard Library C Standard Library [Last modified : 2006-11-30] Contents : Diagnostics : Character Class Tests : Error Codes Reported by (Some) Library Functions : Implementation-defined Floating-Point Limits : Implementation-defined Limits : Locale-specific Information : Mathematical Functions : Non-local Jumps : Signals : Variable Argument Lists : Definitions of General Use : Input and Output : Utility functi.. 더보기
fork()와 exec() [펌] 이전에 System Call과 SubRoutine의 차이를 살펴보았기 때문에, 이제 System Call이 무슨 일을 하는지 대충 알 수 있다. (그동안 글은 시간에 쫓겨 자세히 쓸 수 없었지만, 적당한 일 하나를 끝낸 뒤라 시간적 여유가 있어 자세히 써볼까 한다.) System Call로 하드웨어를 컨트롤 하면서 여러가지 작업을 할 수 있는데, fork와 exec는 어떤 작업을 하는 걸까? 이전에 System Call을 활용한 작업 영역을 3가지로 구분하였다. File I/O, Process Control, InterProcess Communication이 그 3가지였는데, fork와 exec는 그 중 Process Control 영역이다. fork와 exec은 따로 얘기할 수 없다. 엄밀히 얘기하면,.. 더보기
fork() 함수를 이용하여 프로세스를 생성하는 이유가 뭔가요? fork 함수를 사용하여 자식 프로세스를 생성하는 것은 알겠습니다. 몇가지 궁금한 것이 있어서요. 1) 자식 프로세스의 생성은 하나의 부모 에서만 가능한 것인가요? 즉 어떤 부모 프로세스에 의해 생성된 자식 프로세스 자체가 부모가 될 수는 없는 것인가요? 2) fork() 함수를 사용하여 프로세스를 생성하는 것은 왜 그런 것인가요? 1)부모프로세스에서 fork()호출하여, 자식프로세스가 생성되면, 자식프로세스로 부터 PID가 반환되게 됩니다. 그러니깐 자식프로세스는 하나의 부모에서만 가능하게 되는거죠. 그리고, 두 프로세스간의 일처리는 PID의 반환에 의해 이뤄지므로 부모프로세스는 자식프로세스의 제어를 할수 있는 역할을 담당하게 됩니다.(부모프로세스는 fork를 호출해서 완전히 독립적인 프로세스를 생성하.. 더보기
fork 는 프로세스를 복제하는 함수입니다. /* runls3 -- run ls in a subprocess */ main() { int pid; printf("Parent pid of a.out: %d\n", getppid()); pid = fork(); /* code for parent process */ if (pid > 0 ) { wait((int *)0); /* wait for completion of child process */ printf("\nParent process id: %d, parent pid: %d, ls completed\n", getpid(), getppid()); exit(0); } /* code for child process */ if (pid == 0) { printf("Child process id: %d, .. 더보기
fork()이야기 1. fork()이야기 1. pstree 명령어를 아무 생각 없이 쳤다가 fork()를 처음 알게 되었을때가 기억났다. 벌써 몇년의 세월이 흘렀구나... 이넘의 pstree는 손에 붙어 버렸구나. 틈만 나면 치는 구나 ls,w 와 함께 ㅋ 처음 알게 됐을 그땐 참 신기 했었다. 왠지... 내가 유닉스 프로세스를 만든다는게 너무 낯설기도 했고. 티비에서만 보던 연예인이, 같이 지하철을 타고 가는 느낌이었다. 갑자기 그때가 생각 나서 주절 주절... UNIX에서 멀티테스킹의 기본 단위는 멀티프로세싱이다. 프로세스를 생성 해서 다중 작업을 할 수 있도록 해준다. 프로세스를 생성 하는 방법중 가장 많이 사용되는 방법중에 하나가 fork()를 이용해서 자식 프로세스를 만드는것이다. 처음에 fork()를 알게되었을땐 무.. 더보기