linux学习之进程篇(二)

进程原语

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;
}
时间: 2024-11-10 07:25:15

linux学习之进程篇(二)的相关文章

linux学习之进程篇(一)

进程 1.PCB 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内的进程控制块是task_struct结构体.现在我们全面了解一下其中都有哪些信息. 进程标示符(PID):描述本进程的唯一标示符,用来区别其他进程.父进程id(PPID) 进程的状态,有运行.挂起.停止.僵尸等状态. 进程切换时需要保存和恢复的一些CPU寄存器. 描述虚拟地址空间的信息. 描述控制终端的信息. 当前工作目录 umask掩码 文件描述符表,包含很多指向file结构体的指针 和信号相关的信

linux学习之进程篇(三)

进程之间的通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进行之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程之间通信(IPC) 进程间通信 1.pipe管道 可以用环形队列实现.队列满的话会阻塞.管道是一种最基本的IPC机制,由pipe函数创建 #include<unistd.h> int pipe(int filedes[2]); 管道作用于有血缘

Qt学习总结-ui篇(二)

qccs定义圆角 border-radius:10px; 如果想给特定位置定义圆角,如: 左上角:border-left-top-radius:10px; 右下角色:border-right-bottom-rasius:10px; 半透明效果 只需要在css中使用rgba(100,100,100,40)这种形式来表示颜色即可. 为可执行文件添加图标 1.新建文件:finename.rc 文件名无所谓,只要后缀为rc就可以. 2.编辑新建的文件,输入以下内容: IDI_ICON1 ICON DIS

linux学习之进程,线程和程序

                                                                                  程序.进程和线程的概念 1:程序和进程的差别 进程的出现最初是在UNIX下,用于表示多用户,多任务的操作系统环境下,应用程序在内存环境中基本执行单元的概念.进程是UNIX操作系统环境最基本的概念.是系统资源分配的最小单位.UNIX操作系统下的用户管理和资源分配等工作几乎都是操作系统通过对应用程序进程的控制实现的! 当使用c c++ j

Linux学习笔记——第一篇——Ubuntu安装与操作

笔者是Windows的使用者,由于Coding的需要以及在Linux下开发的方便,所以开始使用Linux. 当然笔者还是割舍不下Windows的,毕竟很多通讯工具等软件以及游戏在Linux下是没有发行的,所以笔者使用了虚拟机啊. 下面给出简单的安装过程. 1.下载虚拟机软件,笔者比较喜欢VMPlayer,因为它比较轻便且免费,并且很好的支持了拖拽复制功能(VM TOOL),当然也可以使用如VirtualBox.VPC等 链接:https://my.vmware.com/web/vmware/fr

Linux学习之进程管理(十九)

Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps -le 查看系统中所有进程,使用Linux标准命令格式 选项 l:显示详细信息 e:显示所有进程 USER:该进程是由哪个用户产生的 PID:进程的ID号 %CPU:该进程占用CPU资源的百分比,占用越高,进程越消耗资源. %MEM:该进程占用物理内存的百分比,占用越高,进程越消耗资源. VSZ:

Linux学习之日志管理(二十一)

Linux学习之日志管理 目录 日志管理 日志服务 rsyslogd的新特点 启动日志服务 常见日志的作用 日志文件的一般格式 rsyslogd日志服务 /etc/rsyslog.conf配置文件 服务名称 连接符号 日志等级 日志记录位置 日志轮替 日志文件命名 logrotate配置文件 logrotate命令 日志管理 日志服务 在Centos6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件

Linux学习之基础篇

一.Linux学习的必备条件: 1. 计算器概论不硬件相关知识: 2. 先从Linux癿安装不挃令学起: 3. Linux操作系统的基础技能:『使用者.群组癿概忛』.『权限癿观忛』,『程序的定义』等等: 4. 务必学会vi文书编辑器: 5. Shell不Shell Script癿学习: 6. 一定要会软件管理员:Tarball/RPM/DPKG 等软件管理员的安装方式,对你来说重要的不行了.(嵌入式设备,学术研究单位) 7. 网绚基础癿建立:IP概念,路由的概念等等:

Linux学习笔记(十二)--命令学习(用户创建、删除等)

通过上面的几章学习,我们对linux有了一些了解,现在我们再继续进行下去.... 我们习惯的windows 界面系统中,只要在界面里去下鼠标,填写等这些就可以完成了一个用户创建.删除.添加所属组等,那我们在linux里又是怎么操作的呢??? 下面在学习如何使用命令进行一系列的操作时,我们要先了解一些别的: 在linux系统里除了我们要新建的用户外,还有一些特定的用户,我们称呼它为:伪用户. -----------------------------------------------------