sched_child_runs_first doesn't work

Rock Lee rockdotlee at gmail.com
Fri Dec 8 04:35:46 EST 2017


Hi,
I know the vfork guarantees the children run first. I am just curious
why sched_child_runs_first doesn't work. If there is a chance that
child process run first, I would be more glade, since I guess that how
it works, works with probability. However I tried more the 30+ times,
the result was always father process ran first. Eventhough I have't
tried that much, I guess my result still told the truth ---
sched_child_runs_first doesn't work at all.

On Fri, Dec 8, 2017 at 3:50 PM, Alexander Kapshuk
<alexander.kapshuk at gmail.com> wrote:
> If  my understanding of what Linus says in the post referenced below
> is correct, there's never a guarantee which process would run first,
> parent or child.
> http://yarchive.net/comp/linux/child-runs-first.html
>
> vfork(), on the other hand, is said in the post to always run the
> child process first. See below for an example.
> #include <stdio.h>
> #include <unistd.h>
> #include <sys/time.h>
> #include <stdlib.h>
>
> int main(void)
> {
>         struct timeval tv;
>
>         switch(vfork()) {
>         case -1:
>                 perror("vfork failed\n");
>                 exit(-1);
>         case 0:
>                 if (gettimeofday(&tv, NULL) == 0)
>                         printf("child time sec %ld, usec %ld\n",
> tv.tv_sec, tv.tv_usec);
>                 exit(0);
>         default:
>                 if (gettimeofday(&tv, NULL) == 0)
>                         printf("parent time sec %ld, usec %ld\n",
> tv.tv_sec, tv.tv_usec);
>         }
>         return 0;
> }
>
> Sample run:
> ./gettimeofday
> child time sec 1512719270, usec 716672
> parent time sec 1512719270, usec 716748



-- 
Cheers,
Rock



More information about the Kernelnewbies mailing list