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:~$


コメント