シェルは内部でfork()を用いて、プロセスを複製し、その子プロセスにおいて新規のプロセスを呼び出しているのです。
今日は、システムコールgetppid()を用いて、親プロセス(すなわちbash)のプロセスIDを取得するプログラムを書きました。
$ vim parent_process.c
/* parent_process.c */
#include<stdio.h> //printf
#include <sys/types.h> //getppid, getpid
#include <unistd.h> //getppid, getpid
int main(void)
{
printf("My process ID is %d\n", getpid());
printf("My parent PID is %d\n", getppid());
return 0;
}
#コンパイル
$ gcc -o parent_process parent_process.c
#現在、動いているPIDを表示
$ ps
PID TTY TIME CMD
3657 pts/0 00:00:00 bash
3702 pts/0 00:00:00 less
4973 pts/0 00:00:00 ps
$ ./parent_process
My process ID is 4983
My parent PID is 3657