Presentation laddar. Vänta.

Presentation laddar. Vänta.

Get-id.c main( ) { printf( "My PID is %d\n", getpid( ) ); printf( "My parent's PID is %d\n", getppid( ) ); printf( "My User ID (UID) is %d\n", getuid(

Liknande presentationer


En presentation över ämnet: "Get-id.c main( ) { printf( "My PID is %d\n", getpid( ) ); printf( "My parent's PID is %d\n", getppid( ) ); printf( "My User ID (UID) is %d\n", getuid("— Presentationens avskrift:

1 get-id.c main( ) { printf( "My PID is %d\n", getpid( ) ); printf( "My parent's PID is %d\n", getppid( ) ); printf( "My User ID (UID) is %d\n", getuid( ) ); printf( "My Group ID (GID) is %d\n", getgid( ) ); }

2 Test: get-id.c $ id uid=500(f) gid=500(f) groups=500(f) $ gcc -o get-id get-id.c $./get-id My PID id 653 My parent's PID is 636 My User ID (UID) is 500 My Group ID (GID) is 500 $

3 Före fork zfork() klonar en process zPå bilden är processen mitt i systemanropet program PC Anrop till fork() fork() Här kommer den nya processen att skapas

4 Efter fork program PC Anrop till fork() fork() program PC Anrop till fork() fork() Parent processChild process (ny!) Returnerar barnets PID Returnerar noll Här skapades nya processen

5 Test: fork main( ) { int kidpid; printf( "Single process with pid %d\n", getpid( ) ); kidpid = fork( ); if( kidpid < 0 ) { printf( "Fail: cannot fork\n" ); exit( 1 ); } if( kidpid > 0 ) /* parent */ { printf( "P: This is the parent with pid: %d\n", getpid( ) ); printf( "P: My child process has pid: %d\n", kidpid ); } else /* kidpid == 0, child */ { printf( "C: This is the child with pid: %d\n", getpid( ) ); printf( "C: My parent has pid: %d\n", getppid( ) ); }

6 Test: fork $ gcc -o forktest forktest.c $./forktest Single process with pid 800 P: This is the parent with pid: 800 C: This is the child with pid: 801 C: My parent has pid: 800 P: My child process has pid: 801 $

7 Före och efter exec Prog- ram 1 PC Anrop till exec exec Prog- ram 2 PC processprocess (samma gamla!) Returnerar inte! Här utförs exec

8 Signaler zEn signal bryter det program processen kör och startar processens signal-handler zDet finns en standard-handler som används om man inte skrivit någon egen zDet går att returnera från signal-handler och fortsätta där programmet var zAlla signaler har någon egenhet - se upp!

9 wait tid process fork() child process exit() wait() sleeping SIGCHLD

10 zombie tid process fork() child process exit() wait() zombie SIGCHLD

11 Bad parent (never waits) tid process fork() child process exit() init blir styvförälder zombie SIGCHLD exit()


Ladda ner ppt "Get-id.c main( ) { printf( "My PID is %d\n", getpid( ) ); printf( "My parent's PID is %d\n", getppid( ) ); printf( "My User ID (UID) is %d\n", getuid("

Liknande presentationer


Google-annonser