linux学习之八---Linux进程基础知识
一、linux进程
linux是一个多用户多任务的操作系统。
多用户是指多个用户能够在同一时间使用计算机。
多任务是指linux能够同一时候运行几个任务。
进程简单来说就是执行中的程序,Linux系统的一个重要特点是能够同一时候启动多个进程。依据操作系统的定义:进程是操作系统资源管理的最小单位。
1.Linux进程的概念
进程是一个动态的实体,是程序一次运行过程,而且进程是操作系统资源分配的基本单位。
进程与程序的差别:进程是动态的,程序是静态的。进程是执行中的程序,而程序还是保存在硬盘上的可执行代码。
进程与线程的差别:为了让计算机在同一时间内能运行很多其它任务,在进程内部又划分了很多线程。线程是在进程内部,比进程更小而且能独立运行的基本单元。进程在运行过程拥有独立的内存单元,可是线程基本上不拥有系统资源,它与同属一个进程的其它线程共享进程拥有的所有资源。
2.Linux进程的标志
Linux操作系统中,每一个进程都是通过唯一的进程ID标识的。
进程ID是一个非负数,每一个进程除了进程ID外另一些其它标识信息。它们都能够通过对应的函数获得。函数声明在unistd.h头文件里。
getpid():获得进程ID
getppid():获得进程父进程的ID
getuid():获得进程实际用户ID
geteuid():获得进程有效用户ID
getgid():获得进程实际组ID
getegid():获得进程有效组ID
3.Linux进程的结构
Linux中的一个进程由3个部分组成:代码段、数据段、堆栈段。
代码段:存放程序的可运行代码。
数据段:存放程序的全局变量、常量、静态变量。
堆栈段中的堆区:存放动态分配的内存变量。
堆栈段中的栈区:用于函数调用,它存放着函数的參数、函数内部定义的局部变量。
4.Linux进程的状态
执行状态:进程正在执行或iozai执行队列中等待执行。
可中断等待状态:进程正在等待某个事件完毕。
等待过程中能够被信号或定时器唤醒。
不可中断等待状态:进程正在等待某个事件完毕。等待过程中不能够被信号或定时器唤醒,必须等待直到等待的事件发生。
僵死状态:进程已终止。但进程描写叙述符依旧存在,直到父进程调用wait()函数后释放。
停止状态:进程因收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU信号后停止执行或者该进程正在被跟踪(调试程序时。进程处于被跟踪状态)。
5.Linux进程的控制
Linux进程控制包含创建进程、运行新程序、退出进程以及改变进程优先级等。
fork:用于创建一个新进程。
exit:用于终止进程。
exec:用于运行一个应用程序。
wait:将父进程挂起。等待子进程终止。
getpid:获取当前进程的进程ID。
nice:改变进程的优先级。
二、创建进程
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h> int main()
{
pid_t pid; printf("Process Creation Study\n");
pid=fork();
switch(pid)
{
case 0:
printf("Child process is tunning,CurPid is %d,ParentPid is %d\n",
pid,getppid());
break;
case -1:
printf("Process creation failed\n");
break;
default:
printf("Parent process is running,ChildPid is %d,ParentPid is %d\n",
pid,getpid());
break;
}
exit(0);
return 0;
}
普通情况下,函数最多有一个返回值。但fork函数很特殊,它有两个返回值,即调用一次返回两次。成功调用fork函数后,当前进程实际上已经分裂成两个进程,一个是原来的父进程,还有一个是刚刚创建的子进程。父进程在调用fork函数的地方分开。fork函数有两个返回值。一个是父进程调用fork函数后的返回值,该返回值是刚刚创建子进程的ID。还有一个是子进程中fork函数的返回值。该返回值是0。
fork返回两次的前提是进程创建成功,假设进程创建失败,则仅仅返回-1。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFuemhpaHVpXzEwMDg2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
由图可见。以上两次执行结果都算父进程先执行。一般来说,fork之后是父进程先执行还是子进程先执行是不确定的。这取决于内核所使用的调度算法。
父进程调用fork函数后的返回值是刚刚创建子进程的ID(3465),通过getpid函数得到父进程ID(3464)。
子进程调用fork函数后的返回值是0,子进程通过getppid函数得到父进程ID(3464)。
linux学习之八---Linux进程基础知识的更多相关文章
- linux学习笔记:1.基础知识和命令行基本操作
初次学习linux系统,想在这里记录自己的学习痕迹,如发现有不足之处,希望能指出,谢谢啦,之后的学习是在虚拟机VMware 10下的Red Hat Enterprise linux 6 的操作. 一. ...
- linux学习之八-Linux本机性能监控
Linux 优化 1.看看磁盘有没有满(根目录有没有满).内存有没有满.CPU有没有满 查看磁盘有没有满,使用df -h 看看磁盘使用情况 查看内存使用 free -m 特别关注swap用了多少 ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Linux学习之三-Linux系统的一些重要配置文件
Linux学习之三-Linux系统的一些重要配置文件 1.网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 说明: DEVICE=eth0 ...
- Linux学习笔记-Linux系统简介
Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- [Linux 001]——计算机和操作系统的基础知识
在正式开始学习 Linux 操作系统之前,有必要先回顾/学习一下计算机和操作系统的基本知识,为我们在后续的学习中铺路搭桥,在了解计算机一些基础原理的条件下再去进行学习,理解应该会更透彻一些.我会从一个 ...
- 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux经常使用命令 Linux启动过程具体解释 熟悉L ...
- linux学习笔记之进程
一.基础知识 1:进程. 1,进程ID: 非负整数,具有唯一性. 1)ID=0的进程:调度进程/交换进程.内核的一部分.不执行任何磁盘上的程序. 2)ID=1的进程:init进程. 1-自举结束时,由 ...
随机推荐
- UVALive - 3401 Colored Cubes
好久没写解题回顾了.主要是没什么时间,但是还是一直在刷题,图论刷了70%的知识点,不过感觉长进不是很大,所以觉得还是得一步步来,最近还是先从刘汝佳大白书把前面基础章节刷完然后再决定以后的训练方式吧. ...
- 基于ASP.NET的comet简单实现 http长连接,IAsyncResult
http://www.cnblogs.com/hanxianlong/archive/2010/04/27/1722018.html 我潜水很多年,今天忽然出现.很久没写过博客了,不是因为不想写,而是 ...
- Android USB Host与HID通讯 (一)
去年9月份来到现在的公司,接到新公司的第一个项目就是Android USB Host与HID通讯,当时也什么都不懂,就拿着google的api 开发指南 (http://developer.andro ...
- WPF 3D 小小小小引擎 - ·WPF 3D变换应用
原文:WPF 3D 小小小小引擎 - ·WPF 3D变换应用 WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开 ...
- mac 软件安装
[Mac]PS CC 软件下载及破解的详细方法 为github帐号添加SSH keys 在mac下,打开文件都是“Smart Adobe CC Blocker v1.0”已损坏,打不开 brew ma ...
- 【转】下载太慢?简单设置让iTunes提速十几倍
原文网址:http://www.startos.com/mac/ipad/tips/2010120713291.html 今年可以说是苹果欢笑的一年,ipad的发布,iphone4的成功,让用苹果设备 ...
- split方法在低版本IE浏览器上无法解析的问题
前一篇不知道怎么被博客园给删了,重新补发一个. 最近在项目中发现一个很诡异的问题,通过js获取cookie时,发现赋给用户name的时候IE9和低于9以下的浏览器对比时获取到的名字不一样,通过调试发现 ...
- jquery的小插件(按钮抖动)——衍生QQ窗口抖动
1.抖动的按钮 效果预览:http://runjs.cn/detail/tyx8dbag <script type="text/javascript"> //shake ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
微信公众平台(下面简称“公众平台”)注册步骤和导航还是比较流畅的,因此这个教程对于上网经验丰富的朋友来说,有点多余.不过为了保持教程系列的完整性,这里还是认认真真把流程梳理一遍. 第一步:进入公众平台 ...
- ruby编程语言-学习笔记4(第4章 表达式和操作符)
4.6.9 范围 Flip-Flops: ..和... ..和... 操作符不是基于方法的,无法重定义.(优先级比较低) x+1 .. x*x #可以认为是x+1 至 x*x 的范围 因为操作 ...