TVアニメ「食戟のソーマ」ティザーPV
『食戟のソーマ』
おいしそうな料理の出てくるアニメですねえ。おなかがすいてすいてしかたありません。このままだと、空腹で眠れなくなってしまいます。冷蔵庫に何か入っていれば食べるのですが、今日は何もないです。仕方ないので、金魚のように、口をパクパクしようかと思います。パクパクしてるうちに、何か食べた気になることが、まれにあります。パクパクして水をがぶがぶ飲んでまたパクパクします。フォークとナイフを持って雰囲気を作って、口をパクパクさせると効果的です。
では、Cでフォーク(fork)使います。
fork()をコールすると、子プロセスが生成されます。プログラムはfork直後に現行プロセスと子プロセスに分かれて動きます。
takk@deb9:~$ cat -n fork.c 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <unistd.h> 4 5 int main() 6 { 7 int i; 8 pid_t pid1,pid2,my_pid; 9 10 pid1 = getpid(); 11 pid2 = fork(); 12 13 if(pid2 == -1) 14 return -1; 15 else if(pid2 == 0) 16 while(1){ 17 my_pid = getpid(); 18 printf("CHILD my_pid=%d\n",my_pid); 19 printf(" pid1=%d\n",pid1); 20 printf(" pid2=%d\n",pid2); 21 sleep(1); 22 } 23 else 24 while(1){ 25 my_pid = getpid(); 26 printf("PARENT my_pid=%d\n",my_pid); 27 printf(" pid1=%d\n",pid1); 28 printf(" pid2=%d\n",pid2); 29 sleep(1); 30 } 31 32 return 0; 33 } 34 takk@deb9:~$
11行目のforkが成功するとプログラムが2つに分かれたような動きを見せることから、フォークと名前が付いたのでしょうか? 生成された子プロセスでは0が戻り(15行目のpid==0の判定)、現行プロセスである親プロセスでは子プロセスのIDが戻ります。
takk@deb9:~$ gcc fork.c takk@deb9:~$ ./a.out PARENT my_pid=4637 pid1=4637 pid2=4638 CHILD my_pid=4638 pid1=4637 pid2=0 PARENT my_pid=4637 pid1=4637 pid2=4638 CHILD my_pid=4638 pid1=4637 pid2=0 PARENT my_pid=4637 pid1=4637 pid2=4638 CHILD my_pid=4638 pid1=4637 pid2=0 ^C takk@deb9:~$
コメント