11.进程控制

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <stdlib.h>
 4 
 5 //获取线程的属性
 6 void TestPid()
 7 {
 8         //进程线程编号
 9         printf("My Pid: %d\n",getpid());
10         // 父进程线程编号
11         printf("Parent Pid: %d\n",getppid());
12         //同组线程编号
13         printf("groutp pid:%d\n",getpgrp());
14         
15         //用户id
16         printf("uid:%d\n",getuid());
17         //有效用户id
18         printf("euid:%d\n",geteuid());
19         //进程到组id
20         printf("gid:%d\n",getgid());
21         //进程到有效组id
22         printf("egid:%d\n",getegid());
23         
24         //chmod u+s uid_demo 改变运行程序的运行权限,使程序暂时拥有文件属主到用户权限
25 }
26 
27 //fork
28 void TestFork()
29 {
30         pid_t pid;
31         
32         pid = getpid();
33         printf("MyPid:%d\n",pid);
34         
35         pid = fork();//分裂成两个进程执行以下语句,不共享进程资源,同时调用
36         //pid = vfork();//共享进程资源,子进程先执行,执行完之后再执行父进程
37         
38         if(pid <0 )
39         {
40                 perror("Fail to fork");
41                 return;
42         }
43         
44         //如果是子进程
45         if(pid == 0)
46         {
47                 printf("This is a child process [%d]\n",getpid());
48                 //执行另一个程序作为原进程到子进程,后面的语句不会执行
49                 execl("./file","./file",NULL);
50                 printf("2134");
51                 
52         }
53         //如果是父进程
54         else
55         {
56             printf("This is a parent process [%d]\n",getpid());
57         }
58 
59         //退出,资源由父进程进行释放。,如果是类不会调用析构函数
60         _exit(0);
61         //exit(0),资源被子进程进行释放
62         //return 资源出栈,会调用析构函数
63 }
64 
65 //execl execv
66 void TestExec()
67 {
68         pid_t pid = fork();
69         
70         if(pid == 0)
71         {
72             //child
73             printf("I am child [%d]\n",getpid());
74             
75             //execl("/bin/ls","ls","-l",NULL);
76             char *argv[3] = {"ls","-l"};
77             execv("/bin/ls",argv);
78             printf("I can not to be printed");
79         }
80         else
81         {
82             printf("I am father [%d]\n",getpid());
83         }
84 }
85 
86 int main()
87 {
88     //TestPid();
89     //TestFork();
90     TestExec();
91     
92     return 0;
93 }

猜你喜欢

转载自www.cnblogs.com/xiaochi/p/8985335.html