UNIX 시스템에서 프로세스가 생성될 때 할당되는 pid 값은 현재 시스템에서 사용되지 않고 있는 pid 값중 가장 작은 값이 할당되는 것으로 알고 있습니다.
parent process가 생성된 시점과 parent가 fork()를 호출한 시점 사이에 시스템에서 프로세스가 생성되거나 종료한 내용이 없다면 child의 pid는 parent의 pid+1이 될 것입니다.
하지만 그 시점 사이에 시스템에서 새로운 프로세스가 생성되었거나 혹은 parent pid보다 작은 값을 자신의 pid로 가지는 프로세스가 종료하였다면 child process의 pid값은 parent + 1이 아니게 됩니다.
UNIX 시스템에서 프로세스가 생성될 때 할당되는 pid 값은 현재 시스템에서 사용되지 않고 있는 pid 값중 가장 작은 값이 할당되는 것으로 알고 있습니다.
parent process가 생성된 시점과 parent가 fork()를 호출한 시점 사이에 시스템에서 프로세스가 생성되거나 종료한 내용이 없다면 child의 pid는 parent의 pid+1이 될 것입니다.
하지만 그 시점 사이에 시스템에서 새로운 프로세스가 생성되었거나 혹은 parent pid보다 작은 값을 자신의 pid로 가지는 프로세스가 종료하였다면 child process의 pid값은 parent + 1이 아니게 됩니다.
태클 거는 것은 아니지만 프로세스 번호는 사용되지 않고 있는 pid값중 가장 작은 값으로 할당 된다는 말은 약간 어폐가 있는 것 같습니다.
1번 부터 순차적으로 번호를 할당해주는 것으로 알고 있습니다. (적어도 리눅스에서는)
1번은 init 프로세스이고 그 이후에 생성되는 프로세스들은 실행된 순서대로 2,3,4... 로 번호가 매겨집니다. 생성됐던 프로세스가 끝나면 그 번호는 비워둔 채 남겨지죠.
이런식으로요.
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 keventd
3 ? 00:00:00 kapmd
4 ? 00:00:00 ksoftirqd_CPU0
5 ? 00:00:11 kswapd
6 ? 00:00:02 bdflush
7 ? 00:00:00 kupdated
8 ? 00:00:00 mdrecoveryd
12 ? 00:00:05 kjournald
87 ? 00:00:00 khubd
180 ? 00:00:00 kjournald
556 ? 00:00:00 syslogd
561 ? 00:00:00 klogd
577 ? 00:00:00 portmap
쉘 명령도 한번 실행될 때마다 프로세스를 하나씩 생성시키고 종료하기 때문에 초기화가 긴 프로그램을 백그라운드로 실행시키고 ls나 ps를 실행시켜보면 (확실히)중간이 비게 됩니다. 아래처럼요..
529 0 6776 S test
532 0 6776 S test
533 0 6776 S test
534 0 6776 S test
535 0 1508 R ps
그런데 제 경우는 프로그램을 실행시켜보면 parent 프로세스와 child 사이에 pid가 1개는 보통 빠져있더군요.
저도 프로세스를 생성하는 과정에서 일어나는 내용에 대해서는 자세히 모르기 때문에 거기까지는 정확히 얘기할 수 없지만 어쨌든 프로세스 번호는 생성되는 순서대로 주욱 번호를 붙여주네요.
되돌림값...
fork()의 되돌림값이요.
자식은 0을 되돌려 받고, 부모에게는 자식의 pid를.
----
The future is here. It's just not widely distributed yet.
- William Gibson
그건 아는데요...
그건 아는데요...
child도 자신의 pid를 가지잖아요...
부모 pid + 1 이 child pid 라고 생각을 했는데...
ps를 찍어 보니 다른 경우도 있더라고요...
좀 가르쳐 주세요...
[code:1]pid_t pid;pid = fork()
/***********************
* while(1) sleep(INFINITE);
***********************/
음야...
음... 질문의 요지를 잘 이해를 못하겠지만,
getpid(); 나 getppid(); 함수를 사용하셔요.
getppid();함수는 부모의 프로세스를
getpid();는 현재 프로세스를 리턴합니다.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
[quote]부모 pid + 1 이 child pid 라고 생각을 했는데
UNIX 시스템에서 프로세스가 생성될 때 할당되는 pid 값은 현재 시스템에서 사용되지 않고 있는 pid 값중 가장 작은 값이 할당되는 것으로 알고 있습니다.
parent process가 생성된 시점과 parent가 fork()를 호출한 시점 사이에 시스템에서 프로세스가 생성되거나 종료한 내용이 없다면 child의 pid는 parent의 pid+1이 될 것입니다.
하지만 그 시점 사이에 시스템에서 새로운 프로세스가 생성되었거나 혹은 parent pid보다 작은 값을 자신의 pid로 가지는 프로세스가 종료하였다면 child process의 pid값은 parent + 1이 아니게 됩니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
[quote="stoneshim"][quote]부모 pid + 1 이 c
태클 거는 것은 아니지만 프로세스 번호는 사용되지 않고 있는 pid값중 가장 작은 값으로 할당 된다는 말은 약간 어폐가 있는 것 같습니다.
1번 부터 순차적으로 번호를 할당해주는 것으로 알고 있습니다. (적어도 리눅스에서는)
1번은 init 프로세스이고 그 이후에 생성되는 프로세스들은 실행된 순서대로 2,3,4... 로 번호가 매겨집니다. 생성됐던 프로세스가 끝나면 그 번호는 비워둔 채 남겨지죠.
이런식으로요.
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 keventd
3 ? 00:00:00 kapmd
4 ? 00:00:00 ksoftirqd_CPU0
5 ? 00:00:11 kswapd
6 ? 00:00:02 bdflush
7 ? 00:00:00 kupdated
8 ? 00:00:00 mdrecoveryd
12 ? 00:00:05 kjournald
87 ? 00:00:00 khubd
180 ? 00:00:00 kjournald
556 ? 00:00:00 syslogd
561 ? 00:00:00 klogd
577 ? 00:00:00 portmap
쉘 명령도 한번 실행될 때마다 프로세스를 하나씩 생성시키고 종료하기 때문에 초기화가 긴 프로그램을 백그라운드로 실행시키고 ls나 ps를 실행시켜보면 (확실히)중간이 비게 됩니다. 아래처럼요..
529 0 6776 S test
532 0 6776 S test
533 0 6776 S test
534 0 6776 S test
535 0 1508 R ps
그런데 제 경우는 프로그램을 실행시켜보면 parent 프로세스와 child 사이에 pid가 1개는 보통 빠져있더군요.
저도 프로세스를 생성하는 과정에서 일어나는 내용에 대해서는 자세히 모르기 때문에 거기까지는 정확히 얘기할 수 없지만 어쨌든 프로세스 번호는 생성되는 순서대로 주욱 번호를 붙여주네요.
rommance.net
예. 제가 잠시 착각했습니다.프로세스 내에서 fd값이 할당되는 것
예. 제가 잠시 착각했습니다.
프로세스 내에서 fd값이 할당되는 것과 혼동하는 바람에 사실과 다른 내용을 썼군요... 죄송합니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
댓글 달기