linux进程1

进程是os中非常重要的一个概念,也是十分基础的概念,十分重要。以下是自己学习的一点学习笔记,是个人见解,欢迎批评指正。

1、看看unix标准对于进程的定义:“一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源”。线程站且放到后面介绍。 计算程序就是数据结构和算法的组合。其中算法就是实现功能的方法,而数据结构就是实现算法采用的数据结构,其实也包括实现的代码。简单理解,进程是正在运行的程序,每个运行中的程序都可以看作一个进程。linux是支持多个进程同时运行的,这个也很容易理解,比如我现在写着blog和听歌,就运行这浏览器和播放器两个进程。

当然进程并不是简单的执行中的代码那么简单,还包括其他的系统资源,例如打开的文件,挂起的信号,内核内部数据,处理器状态,地址空间及一个或多个执行线程,当然还包括用来存放全局变量的数据段。关于linux中进程和线程的之间的关系和区别暂时不介绍,留在后续文章中。

2、进程的查看。ps命令提供一种查看进程相关状态信息,包括进程PID、进程状态、进程所持有的用户名等等。

~$ ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 11:04 ?        00:00:01 /sbin/init

root         2     0  0 11:04 ?        00:00:00 [kthreadd]

root         3     2  0 11:04 ?        00:00:01 [ksoftirqd/0]

root         5     2  0 11:04 ?        00:00:00 [kworker/0:0H]

root         7     2  0 11:04 ?        00:00:10 [rcu_sched]

root         8     2  0 11:04 ?        00:00:00 [rcu_bh]

root         9     2  0 11:04 ?        00:00:01 [migration/0]

root        10     2  0 11:04 ?        00:00:00 [watchdog/0]

  这里仅仅查看列举了本机中前10进程的相关信息。其中比较重要的两个标识符为:PID为进程标识符,PPID为父进程的进程标识符。UID为用户的标识符,这里为超级用户root。其他的还涉及到时间(STIME,TIME),TTY为标准输出终端,CMD为命令行。通过ps命令组合不同的查看选项,可以查看进程很多信息。这里并不一一介绍,读者可以通过man ps命令来了解相关的信息,有比较详细的文档说明。

3、进程的创建。linux内核在创建一个新的进程时,通过复制当前进程的来达到创建新进程的目的。新进程成为子进程而源进程为父进程,两者几乎一模一样,两者主要通过PID值来区分。新的进程在创建的程序处开始执行,并且共享父进程的代码。下面有个例子。

#include<sys/types.h>

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

int main()

{

    pid_t pid;

    char *message;

    int n;

    printf("fork program starting\n");

    pid=fork();

   

    if(pid==-1){

        perror("fork failed");

        exit(1);

    }

    else if(pid==0){

        message="this is the child";

        n=5;

    //  sleep(n);

    }

    else{

        message="this is the parent";

        n=3;

    //  sleep(n);

    }

    for(;n>0;n--){

        puts(message);

        sleep(1);

    }

    exit(0);

}

程序执行结果如下:

$ ./fork1 fork program starting

this is the parent

this is the child

this is the parent

this is the child

this is the parent

this is the child

this is the child

this is the child

linux提供fork系统调用来创建新的进程。fork进程新创建的进程就会下一条指令处开始执行,那么系统是如何区分父亲进程和子进程的呢。当主要还是通过fork进程放回的pid来确定的,子进程的pid返回值为0而浮进程为1。关于fork的用法可以查阅doc,有比较详细的介绍。

DESCRIPTION
       fork()  creates  a new process by duplicating the calling process.  The new process, referred to as the child, is an  exact  duplicate  of  the calling  process,  referred  to as the parent, except for the following  points:
        其实上面的那个小程序还有点小bug,在这里先放一下,后续会提到,主要原因就是父进程比子进程先终结,白发送青巳,老子死了儿子没长大,谁抚养呢。

时间: 2024-10-04 17:39:18

linux进程1的相关文章

Linux进程的睡眠和唤醒

1   Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING.一旦一个运行中的进程时间片用完, Linux内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行. 当然,一个进程也可以主动释放CPU的控制权.函数schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用CPU.一旦这个主动放弃CPU的进程被重新调度占用CPU,那么它将从

Linux进程管理与调度-之-目录导航【转】

转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme 目录(?)[-] 项目链接 进程的描述 进程的创建 进程的加载与运行 进程的退出 进程的调度 调度普通进程-完全公平调度器CFS 日期 内核版本 架构 作者 GitHub CSDN 2016-07-21 Linux-4.6 X86 & arm gatieme

Linux进程管理简谈

Linux系统进程管理简谈 进程是什么? 简单来说进程是一个正在执行的程序的一个副本,存在生命周期,有段指令和代码在不断运行. linux内核存储信息的固定格式:task struct 进程的相关信息存储在链表中 多个任务的task struct组件的链表:task list 进程的创建:父进程创建子进程(内核创建init进程,剩余一切进程有init及其子进程进程创建) 父进程创建子进程时向内核调用fork()来创建子进程并且通过调用clone()复制父进程的信息给子进程 Linux进程的优先级

Linux进程的实际用户ID和有效用户ID

在Unix进程中涉及多个用户ID和用户组ID,包括如下: 1.实际用户ID和实际用户组ID:标识我是谁.也就是登录用户的uid和gid,比如我的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看). 2.有效用户ID和有效用户组ID:进程用来决定我们对资源的访问权限.一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID.当设置-用户-ID(SUID)位设置,则有效用户ID等于

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)【转】

转自:http://blog.csdn.net/gatieme/article/details/51872659 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme 目录(?)[-] 前景回顾 1 Linux的调度器组成 2 调度工作 进程上下文 1 进程上下文的概念 2 上下文切换 context_switch进程上下文切换 1 context_switch完全注释 2 prepare_arch_switch切换前的准备工作

Linux进程环境

1.进程是什么 正在运行的程序,就是进程,进程是动态的,程序是静态的:进程在执行过程中具有状态的变化. 进程具有三个不同的状态 : 运行.就绪.阻塞; 三模型分析 : 查看进程的命令ps -ef 和 top,   kill PID(杀死进程) 运行态:进程获得CPU资源,能够使用CPU计算机程序中的指令,当CPU的使用时间用完时,则进入就绪状态. 就绪态:其它资源已经就绪,只差CPU资源. 阻塞态:处理CPU之外的其它资源还未就绪. 进程的调度:进程启动时处于就绪状态,为了调度进程对CPU的使用

Linux进程及作业管理

一.进程查看及其管理工具 --------------------------------------------- ps命令:报告当前进程的快照信息 ps - report a snapshot of the current processes. 选项: -A:显示所有进程与-e相同的效果 -a:不与终端相关的所有进程 -u:与用户相关的进程 -x:通常和a,u结合使用,显示出来比较全面的信息 -f:做一个更为完整的输出 常用的组合:     ps -ef 以完整的信息显示所有进程信息   

Htop – Linux进程监控工具

Htop 是一个非常高级的交互式的实时linux进程监控工具. 它和top命令十分相似,但是它具有更丰富的特性,例如用户可以友好地管理进程,快捷键,垂直和水平方式显示进程等等. Htop是一个第三方工具,它不包含在linux系统中,你需要使用YUM包管理工具去安装它. 一,以rpm包方式安装htop 1,配置yum源 -------------- For RHEL/CentOS 7 -------------- # wget http://pkgs.repoforge.org/rpmforge-

Linux系统--Linux进程与作业管理(2)

Linux系统--Linux进程与作业管理(2) Linux进程相关的基本概念已经了解,Linux进程管理的一些命令: pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkil,job,bg,fg,nohup 1.pstree命令: pstree - display a tree of processes:以树状形式显示当前系统进程,和命令tree相似. 2.ps命令: ps - report a snapshot of 

Linux进程控制(一)

1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别.程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度和消亡的过程,是Linux的基本调度单位.那么从系统的角度看如何描述并表示它的变化呢?在这里,是通过进程控制块(PCB)来描述的.进程控制块包含了进程的描述信息.控制信息以及资源信息,它是进程的一个静态描述. 内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,