.


:




:

































 

 

 

 


1. ------------------------------------------------------------------------------------- 3
2. ------------------------------------------------------------------------------------------ 4
3. ---------------------------------------------------------------------------------------- 5
4. --------------------------------------------------------------------------------------- 6
5. -------------------------------------------------------------------------------- 7
6. --------------------------------------------------------------------- 10
7. -------------------------------------------------------------------------- 14
8. ----------------------------------------------------------------------- 15
9. ----------------------------------------------------------------------- 16
10. ---------------------------------------------------------------------------------------- 18
11. ------------------------------------------------------------------------ 18

 


 

UNIX . , . , , . , , . , .

, process ID, PID, , , . , , . . , , . . , init. init , PID 1. init .

.

fork(), . . exec(). , UNIX .

 

 

UNIX fork().

fork(), .

, , , .

exec() .

.

1. , . .

2. 1 , .

3. , .

4. . .

5. , 2 , () .

1.

#include <sys/types.h>

#include <unistd.h>

#include <stdio.h>

 

int main(){

pid_t pid, ppid;

int a = 0;

(void)fork(); //

a = a+1; //

pid = getpid(); // pid

ppid = getppid(); // pid

printf("My pid = %d, my ppid = %d, result = %d\n", (int)pid, (int)ppid, a); // , a

return 0;

}

 

2.

#include <sys/types.h>

#include <unistd.h>

#include <stdio.h>

 

int main(){

pid_t pid, ppid;

pid = fork(); //

if(pid == -1){ //

printf("\nError!!!");

} else if(pid == 0){ //

printf("I'm child!\n");

} else { //

printf("I'm you father!\n");

}

return 0;

}

 

3.

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

 

int main(int argc, char *argv[], char *envp[]){

printf(" : \n");

int i = 0;

for(; i < argc; i++){ //

printf("%s ",argv[i]); //

}

printf("\n : \n");

i = 0;

while(envp[i]!= NULL){ // NULL

printf("%s\n",envp[i]); //

i++;

}

return 0;

}

 

4.

#include <sys/types.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

 

int main(int argc, char *argv[], char *envp[]){

(void)execle("/bin/cat","/bin/cat","03-2.c",NULL,envp); // cat " " " "

printf("Error!"); // ,

exit(-1);

return 0;

}

 

5.

#include <sys/types.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

 

int main(int argc, char *argv[], char *envp[]){

pid_t pid;

pid = fork(); //

if(pid == -1){ //

printf("\nError!!!");

} else if(pid == 0){ //

execle("/bin/ls","-l",NULL,envp); // ls -l

} else { //

wait(); //

printf("I'm you father!\n");

}

return 0;

}

 

 

-

1.

 

 

2.

 

 

3.

4.

 

5.

 

 

1.

2.

 

3.

 

4.

 

5.

1.

fork() . a , . . , , .

2.

fork(), . , -1, , , 0, , , , . .

3.

, , main- *argv, argc, main(). . *envp, main(). NULL, while().

4.

execle() . NULL. . .

5.

, fork() () (ls -l). .

 

 

UNIX . , . , , . , , . , .

, process ID, PID, , , . , , . . , , . . , init. init , PID 1. init .

UNIX fork() exec().

fork() , () , . fork() ( fork() PID , ).

fork() exec(), ( , , UNIX ). , () UNIX ( ) , init ( PID = 1), .

( ) exit(), wait() ( waitpid()) . , wait() , (zombie), . .

.

- . main() . , . , , . , : argc argv. argc , 1, . argv . - . , .

 

fork(), , ( ). getpid() getppid(). exec(), , exec(). fork().

 

 

1. . Linux. ..: , 2008. 416 .



<== | ==>
| N 4
:


: 2015-11-23; !; : 1611 |


:

:

- , .
==> ...

1832 - | 1621 -


© 2015-2024 lektsii.org - -

: 0.038 .