码迷,mamicode.com
首页 > 系统相关 > 详细

linux学习之进程篇(二)

时间:2017-11-10 00:21:47      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:http   ret   UI   用户id   int   alt   语句   调用exe   地址映射   

进程原语

1.fork

#include<unistd.h>

 pid_t fork(void);

 技术分享

fork

  子进程复制父进程,子进程和父进程的PID是不一样的,在克隆pcb时,pid没有复制,fork还有底层的函数,如creat(),clone(),retrun 返回。子进程执行的第一条语句是return。

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
   pid_t pid;
   int n=10;
   //调用一次返回两次,在父进程返回子进程的PID,在子进程返回0;
   pid=fork();//父和子都存在了
   if(pid>0)
    {
           /*in parent*/
       while(1){
           printf("I am parent\n",n++);
           printf("my pid="%d\n",getpid());
           printf("my parent pid="%d\n",getppid());
           sleep(1);
         }
          
     }
     else if(pid==0)
     {
          /*in child*/
         while(1)
         {
           printf("I am ch\n",n++);
           printf("my pid="%d\n",getpid());
           printf("my parent pid="%d\n",getppid());
           sleep(1);
          }
     }
    else
    {
          perror("fork");
          exit();//创建进程失败
    }
    return 0;
}
//读时共享,写时复制,只读时通过虚拟地址映射到同一物理地址,只有进行写操作时才拷贝一份物理地址,这样不会造成物理地址的浪费。

进程相关函数:

#include<sys/types.h>
#include<unistd.h>

pid_t getpid(void);//返回调用进程的PID
pid_t getppid(void);//返回调用进程的PID

uid_t getuid(void);//返回实际用户ID
uid_t geteuid(void);//返回有效用户ID

gid_t getgid(void);//返回实际用户组ID
gid_t getegid(void);//返回有效用户ID

技术分享

sudo chmod 04755 文件名

如passwd命令,可用ls -l 查看其权限位,其在执行时候,临时身份变为了root。

vfork

  • 用于fork后马上调用exec函数
  • 父子进程,共用同一地址空间,子进程如果没有马上exec而是修改了父进程出得到量值,此修改会在父进程中生效
  • 设计初衷,提高系统效率,减少不必要的开销
  • 现在fork已经具备读时共享写时复制机制,vfork逐渐废弃。

2.exec族

技术分享

exec

exec加载一个程序,替换掉APP的代码段,堆,栈。

#include<stdio.h>
#include<unistd.h>

int main(void)
{
    printf("hello\n");
    execl("/bin/ls","ls","-l",NULL);
   //后边这一句不会再执行了
    printf("world\n");
   return 0;
}

 

linux学习之进程篇(二)

标签:http   ret   UI   用户id   int   alt   语句   调用exe   地址映射   

原文地址:http://www.cnblogs.com/rainbow1122/p/7811901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!