Re: sched_child_runs_first doesn't work

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Fri, Dec 8, 2017 at 10:07 AM, Rock Lee <rockdotlee@xxxxxxxxx> wrote:
Hi,

I ran my test code but always got the father process run first, even
after setting sched_child_runs_first. Could anyone give me a hint?
Here is my test code.

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

int main(void)
{
    struct timeval tv;
    struct timezone tz;
    int err;
    pid_t ret = fork();

    if (ret == 0) {
        err = gettimeofday(&tv, &tz);
        if (!err)
            printf("child time sec %d, usec %d\n", tv.tv_sec, tv.tv_usec);

         printf("this child.\n");
    } else if (ret > 1) {
        err = gettimeofday(&tv, &tz);

        if (!err)
            printf("father time sec %d, usec %d\n", tv.tv_sec, tv.tv_usec);
        printf("this father.\n");
    } else
        printf("err!!\n");
    return 0;
}


--
Cheers,
Rock

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Hi...

IIRC, gettimeofday() will eventually call system call (with the same name, I think). And I guess this is where the root cause come.

Your child might actually ran first, but since it called system call, re-scheduling the kicked in, and parent got the chance to run.

In order to prove this theory, try to execute printf("this is parent") or printf("this is child") first, then gettimeofday() later.

Good luck and cmiiw

--
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux