Proc u-area | |||
C 2 :
1. - fork()
2. exec() - , .
pid_f fork(void) - .
:
,
,
fork() .
:
- PID, PPID
-
- , fork() . - 0, PID
- u-area
- /
.
, . fork():
1. swap
2. /proc PID -
3. proc
4. .
5. u-area .
6. , , .
7. , .
8. "0" fork() - ( PID - )
9. .
UNIX -
main ()
{
int pid;
pid = fork();
if (pid == -1)
{
perror (fork);
exit();
}
if (pid == 0)
{
// , . , fork()
}
else
{
// , .
}
printf (something\n); // , ,
return 0;
}
Kill Sig-number Pid (Sig-number . . )
|
|
Kill$! , .
Proc& - .
exec()
2 :
1.
2.
int execve(path,argv,envp) |
int execv(const char *path,const char *argv) |
int execvp(file,argv) |
int execle(path,arg0,...,argN,0,envp) |
int execl(file,arg0,...,argN,0) |
int execl(path,arg0,...,argN,0) |
exec() |
UNIX |
#include <unistd.h>
execve().
: PID, PPID , (EUID, EGID) SUID, , , , , .
exec():
1. () (file)
2. (args)
3. (envp)
, fork().( UNIX).
int
, -1 .
wait(&status) -
waitid(id_type, id)
waitpid(id_group process_all) . ID . process_all.
stat_log. Ÿ .
exec():
exec() |
. ? |
1- #!shellname ( ) Shell Name |
SUID(SGID)? |
EUID (EGID) UID (GID) |
exec(), |
swap , , |
. swap |
+ |
? |
. 0 |
, ( ) |
. IP |
2 3 |
+ (XPGH) |