博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux进程模型
阅读量:5112 次
发布时间:2019-06-13

本文共 1505 字,大约阅读时间需要 5 分钟。

传统的Linux模型里有三种创建或者修改进程的操作:
  –system用于调用shell,执行一个指定的命令;
  –fork用于创建一个新的进程,该进程几乎是当前进程的一个完全拷贝;
  –exec可以在进程中用另外的程序来替换当前运行的进程;
 
 
什么是进程?
–进程是一个正在执行的程序实例,他也是Linux基本的调度单位,一个进程由如下元素组成
–进程的当前上下文(context),它是进程当前执行状态。
–进程的当前执行目录;
–进程访问的文件和目录
–程序的访问权限
–内存和其他分配给进程的系统资源
 
 
内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,运行多久以及采用什么特性运行它。
内核的调度器负责在所有的进程间分配CPU时间,称为时间片,它轮流在每个进程分的时间片用完后从进程那里抢回控制权。
时间片非常小,小到让系统上的几个进程仿佛是在同一时间运行一样。
每个进程还包含了有关它们自身的充分信息,必要的时候内核能在执行与不执行它之间进行切换。
 
 
进程具有许多能唯一定义它们的属性和特性。
进程的属性或特性能够把它们标识出来并且规定它们的行为。
Linux内核维护了关于每个进程的大量信息,并且对外提供一个访问这些信息的接口。
 
 
进程标识号。
  –进程最知名的属性就是进程号(processID,PID)和它父进程号(parent processID,PPID)。
PID和PPID都是非零的整数。
一个PID唯一标识一个进程。
一个进程创建的另一个新进程称为子进程。相反地,创建子进程的进程称为父进程。
所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫init进程
  –Init进程是linux内核启动后第一个执行的进程。
  –Init引导系统,启动守护进程并且运行必要的程序。
 
 
为什么要知道一个进程的PID以及它父进程的PID呢?。
  –PID常见的用法之一就是创建唯一的文件或目录名。
  –另一种的用途是把PID写入日志文件做为日志消息的一部分。
得到PID和PPID的例子

int main(void)

{

  printf("PID=%d\n", getpid());

  printf("PPID=%d\n",getppid());

  return EXIT_SUCCESS;

}

 

 

虽然计算机用数字工作挺好,但普通人甚至程序员还是感到使用名字更舒服一些。幸运的是有两种方法能把UID转换为人可读的名字。
getlogin函数返回执行程序的用户登录名。
可以把登录名作为参数传递给getpwnam函数,这个函数能返回/etc/passwd文件中与该登录名相应的一行完整信息。

#include <pwd.h>

struct passwd *getpwnam(const char *name);

 

 

name必须是一个指向包含用户名的字符串指针。
getpwnam返回一个指向passwd结构的指针。

int main(void)

{

  char *login = getlogin();

  struct passwd *ps = getpwnam(login);

  printf("user name=%s\n", ps->pw_name);

  printf("UID=%d\n", ps->pw_uid);

  printf("home dir=%s\n", ps->pw_dir);

  return EXIT_SUCCESS;

}

 
 
 
翻译结果
 

转载于:https://www.cnblogs.com/shichuan/p/4496173.html

你可能感兴趣的文章
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>