
1、进程:Linux自身运行的独立程序。
2、进程组:进程组是一个或多个进程的集合。
_____________________________________________________
Linux包括三种不同类型的进程,每种进程都有自己的特点和属性:
3、交互进程 —— 由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
4、批处理进程 —— 这种进程和终端没有联系,是一个进程序列。
5、监控进程(也称守护进程)—— linux系统启动时启动的进程,并在后台运行。
_______________________________________________________________
6、会话:一个用户登录终端后会新建一个会话,它是和控制终端产生IO交互的过程。这个过程可以称之为会话期。会话期可以产生一个 或 多个进程组的集合。(比喻打电话,首先要电话的接通,接通了才可以产生人与人之间的信息交互。在此会话期间可以产生一个或多个不同范畴的话题)
7、作业:作业类似于用户提交给系统的一个任务。一个作业可以包含一个或多个进程共同完成一个任务。(比喻会议上BOSS需要完成一个任务,根据需求可以分配到一个或多个人配合完成。)
8、作业控制:指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。这样用户就能在多个独立作业间进行切换。(比喻正在进行常规工作的员工,经理突发一个事情需要协助处理。这位员工放下手上的工作(挂起)。首先处理经理安排的事情,完事后再处理常规工作的事情。)
二、通过 date 和 sleep 命令理解前台、后台作业。date 命令是显示系统时间,sleep 命令是设置延时。
1、前台执行命令:
1)、前台执行命令。输入输出都是按部就班,执行完一个命令再执行下一个命令,把结果打印出来。
红色下划线:date 查看当前日期时间。
黄色下划线:sleep 10 延时10秒。
蓝色下划线:date 查看当前日期时间。
通过结果可以看出第一个 date 打印出日期时间后,延时10再执行一个 date 打印日期时间。两个时间相隔 10 秒。
2)、系统正在执行前台的命令时,再输入命令是不会马上执行。要执行完毕前面的命令才可以执行后面输入的命令。同样用 date 和 sleep做实验:
红色下划线:date 输出当前日期时间。
黄色下划线:sleep 60 系统执行延时 60 秒的 *** 作。 [root@localhost ~]# 用户标识符没有出现。虽然光标可以进行输入,但输入的 ls /tmp/ 命令并没有马上执行,没有输出。因为此时,前台正在执行 sleep 60 延时60秒的指令。
红色下划线:等待 sleep 60 执行完毕后,再执行一个 date 输出当前日期时间。两个 date 之间时间相隔 60 秒。
黄色下划线:待整条 date sleep 60 date 命令都执行完毕后,再执行刚才延时 60 秒时输入的 ls /tmp/ 命令,输出结果。
蓝色下划线:[root@localhost ~]# 用户标识符出现才算前台命令执行完毕,可以继续正常 *** 作。
2、后台执行命令:
&:命令后面使用 &符号,可以让命令在后台执行。
jobs:可以查看正在后台运行的作业。
jobs选项:-l —— 除了列出作业号外,同时列出 PID。
-r —— 列出仅仅在后台运行的作业。
-s —— 列出仅仅再后台暂停的作业。
1)、后台运行的命令进程不会影响到前台命令进程。
红色下划线:sleep 30 &—— 把 sleep 30 丢到后台运行。
黄色下划线:通过 jobs 命令跟踪进程情况。(Runing —— 正在运行,Done —— 完成)
绿色下划线:sleep 后台运行期间进行了 ls 和 tail 命令的查询输出,正常运作。
蓝色下划线:jobs 没有输出,代表 sleep 已经完结,没有后台进程。
2)、挂起 和 中断后台运行的命令。
Ctrl+c:中断后台进程。Ctrl+z:挂起后台进程。
jobs 命令可以查看到挂起的命令,不可以查看中断的命令。
3)、jobs选项:-l —— 除了列出作业号外,同时列出 PID。
红色下划线:sleep 100 &,后台运行延时100秒的程序。
黄色下划线:jobs -l 列出所有后台进程(-l —— 含作业号、PID、运行状态 和 执行的命令。)
运行状态有 Running 、Stopped 和 Done,后台正在运行会显示 Running,当运行完毕后用 jobs 查看会显示 Done,并且命令后面的 &符号也会消失。Done只出现一次,下次再用 jobs 查看后台程序就没有了系统曾提示过 Done 的命令。挂起正在运行的命令,后台会显示 Stopped 暂停状态。
-r —— 列出仅仅在后台运行的作业。
-s —— 列出仅仅再后台暂停的作业。
谢谢!Linux内核配置系统由三部组别:
?Makefile:布 Linux 内核源代码 Makefile定义 Linux 内核编译规则;
?配置文件(config.in):给用户提供配置选择功能;
?配置工具:包括配置命令解释器(配置脚本使用配置命令进行解释)配置用户界面(提供基于字符界面、基于 Ncurses 图形界面及基于 Xwindows 图形界面用户配置界面各自应于 Make config、Make menuconfig make xconfig)
些配置工具都使用脚本语言 Tcl/TK、Perl 编写(包含些用 C 编写代码)本文并配置系统本身进行析介绍何使用配置系统所除非配置系统维护者般内核发者须解原理需要知道何编写 Makefile 配置文件所本文我 Makefile 配置文件进行讨论另外凡涉及与具体 CPU 体系结构相关内容我都 ARM 例仅讨论问题明确化且内容本身产影响
2. Makefile
2.1 Makefile 概述
Makefile 作用根据配置情况构造需要编译源文件列表别编译并目标代码链接起终形 Linux 内核二进制文件
由于 Linux 内核源代码按照树形结构组织所 Makefile 布目录树Linux 内核 Makefile 及与 Makefile 直接相关文件:
?Makefile:顶层 Makefile整内核配置、编译总体控制文件
?.config:内核配置文件包含由用户选择配置选项用存放内核配置结( make config)
?arch/*/Makefile:位于各种 CPU 体系目录 Makefile arch/arm/Makefile针特定平台 Makefile
?各目录 Makefile:比 drivers/Makefile负责所目录源代码管理
?Rules.make:规则文件所 Makefile 使用
用户通 make config 配置产 .config顶层 Makefile 读入 .config 配置选择顶层 Makefile 两主要任务:产 vmlinux 文件内核模块(module)达目顶层 Makefile 递归进入内核各目录别调用位于些目录 Makefile至于底进入哪些目录取决于内核配置顶层 Makefile 句:include arch/$(ARCH)/Makefile包含特定 CPU 体系结构 Makefile Makefile 包含平台相关信息
位于各目录 Makefile 同根据 .config 给配置信息构造前配置需要源文件列表并文件 include $(TOPDIR)/Rules.make
Rules.make 文件起着非重要作用定义所 Makefile 共用编译规则比需要本目录所 c 程序编译汇编代码需要 Makefile 编译规则:
%.s: %.c
$(CC) $(CFLAGS) -S $<-o $@
目录都同要求需要各自 Makefile 包含编译规则比较麻烦 Linux 内核则类编译规则统放置 Rules.make 并各自 Makefile 包含进 Rules.make(include Rules.make)避免 Makefile 重复同规则于面例 Rules.make 应规则:
%.s: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $<-o $@
2.2 Makefile 变量
顶层 Makefile 定义并向环境输许变量各目录 Makefile 传递些信息些变量比 SUBDIRS仅顶层 Makefile 定义并且赋初值且 arch/*/Makefile 作扩充
用变量几类:
1) 版本信息
版本信息:VERSIONPATCHLEVEL, SUBLEVEL, EXTRAVERSIONKERNELRELEASE版本信息定义前内核版本比 VERSION=2PATCHLEVEL=4SUBLEVEL=18EXATAVERSION=-rmk7共同构内核发行版本KERNELRELEASE:2.4.18-rmk7
2) CPU 体系结构:ARCH
顶层 Makefile 用 ARCH 定义目标 CPU 体系结构比 ARCH:=arm 等许目录 Makefile 要根据 ARCH 定义选择编译源文件列表
3) 路径信息:TOPDIR, SUBDIRS
TOPDIR 定义 Linux 内核源代码所根目录例各目录 Makefile 通 $(TOPDIR)/Rules.make 找 Rules.make 位置
SUBDIRS 定义目录列表编译内核或模块顶层 Makefile 根据 SUBDIRS 决定进入哪些目录SUBDIRS 值取决于内核配置顶层 Makefile SUBDIRS 赋值 kernel drivers mm fs net ipc lib;根据内核配置情况 arch/*/Makefile 扩充 SUBDIRS 值参见4)例
4) 内核组信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS
Linux 内核文件 vmlinux 由规则产:
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o
--start-group
$(CORE_FILES)
$(DRIVERS)
$(NETWORKS)
$(LIBS)
--end-group
-o vmlinux
看vmlinux 由 HEAD、main.o、version.o、CORE_FILES、DRIVERS、NETWORKS LIBS 组些变量( HEAD)都用定义连接 vmlinux 目标文件库文件列表其HEADarch/*/Makefile 定义用确定先链接进 vmlinux 文件列表比于 ARM 系列 CPUHEAD 定义:
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
表明 head-$(PROCESSOR).o init_task.o 需要先链接 vmlinux PROCESSOR armv 或 armo取决于目标 CPU CORE_FILESNETWORKDRIVERS LIBS 顶层 Makefile 定义并且由 arch/*/Makefile 根据需要进行扩充 CORE_FILES 应着内核核文件 kernel/kernel.omm/mm.ofs/fs.oipc/ipc.o看些组内核重要文件同arch/arm/Makefile CORE_FILES 进行扩充:
# arch/arm/Makefile
# If we have a machine-specific directory, then include it in the build.
MACHDIR := arch/arm/mach-$(MACHINE)
ifeq ($(MACHDIR),$(wildcard $(MACHDIR)))
SUBDIRS += $(MACHDIR)
CORE_FILES := $(MACHDIR)/$(MACHINE).o $(CORE_FILES)
endif
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
SUBDIRS += arch/arm/kernel arch/arm/mm arch/arm/lib arch/arm/nwfpe
CORE_FILES := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)
LIBS := arch/arm/lib/lib.a $(LIBS)
5) 编译信息:CPP, CC, AS, LD, ARCFLAGSLINKFLAGS
Rules.make 定义编译通用规则具体特定场合需要明确给编译环境编译环境变量定义针交叉编译要求定义 CROSS_COMPILE比:
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
......
CROSS_COMPILE 定义交叉编译器前缀 arm-linux-表明所交叉编译工具都 arm-linux- 所各交叉编译器工具前都加入 $(CROSS_COMPILE)组完整交叉编译工具文件名比 arm-linux-gcc
CFLAGS 定义传递给 C 编译器参数
LINKFLAGS 链接 vmlinux 由链接器使用参数LINKFLAGS arm/*/Makefile 定义比:
# arch/arm/Makefile
LINKFLAGS :=-p -X -T arch/arm/vmlinux.lds
6) 配置变量CONFIG_*
.config 文件许配置变量等式用说明用户配置结例 CONFIG_MODULES=y 表明用户选择 Linux 内核模块功能
.config 顶层 Makefile 包含形许配置变量每配置变量具确定值:y 表示本编译选项应内核代码静态编译进 Linux 内核;m 表示本编译选项应内核代码编译模块;n 表示选择编译选项;根本没选择配置变量值空
2.3 Rules.make 变量
前面讲Rules.make 编译规则文件所 Makefile 都包括 Rules.makeRules.make 文件定义许变量重要些编译、链接列表变量
O_OBJSL_OBJSOX_OBJSLX_OBJS:本目录需要编译进 Linux 内核 vmlinux 目标文件列表其 OX_OBJS LX_OBJS "X" 表明目标文件使用 EXPORT_SYMBOL 输符号
M_OBJSMX_OBJS:本目录需要编译装载模块目标文件列表同MX_OBJS "X" 表明目标文件使用 EXPORT_SYMBOL 输符号
O_TARGETL_TARGET:每目录都 O_TARGET 或 L_TARGETRules.make 首先源代码编译 O_OBJS OX_OBJS 所目标文件使用 $(LD) -r 链接 O_TARGET 或 L_TARGETO_TARGET .o 结尾 L_TARGET .a 结尾
1 A,答案很明显,B项完全不相关,C为显示管理,D为远程X系统2 B,A为可执行文件目录,C为设备节点目录,D为系统库文件目录
3 B,!加数字有执行历史命令的功能,!!即为执行最近的一条命令
4 C,ls-l *** 作列出来的文件,第一个字符为d为目录,为-是普通文件或者硬链接,为l 是符号链接。
5 B,>为输出重定向,<为输入重定向,<<和>>为相应的追加模式
6 B,四段权限从左至右分别为文件类型,所有者的权限,所有者所在组的权限,其他用户的权限。
7 D,A为更改文件权限,C为复制,B为分页查看文件内容,D为改变文件的时间记录,但是当文件不存在的时候,touch可以创建文件
8 D,A为强制保存,B为保存,C为保存退出,D为强制退出不保存
9 B,-c参数为输出字符,-q为(--quiet)不输出文件名报头,-n为输出行,-v与-q相反,总是输出文件名
10A,B为用户目录,但是是存放用户库文件,命令等各种用户工具的地方,C存放系统中经常容易变动的文件,如日志文件,D就是指当前用户主目录
11C,不用多说,linux使用的文件系统就是ext2,3,4
12B,ACD都是重启
13B,A为在当前行的上面添加新行,C为开始从光标所在处开始编辑,D为从光标所在处的后一个字符开始编辑
14A,B为删除当前行末尾的单词,C无作用,D删除当前行
15C,选项稍微有问题,应该是.
16B,同第8题
17D,A为创建文件夹,C为移动文件,B并非系统命令,
18A tar -t = tar --list
19C 顾名思义,chown=change owner
20A B为压缩文件命令,C为查找,D为排序,A grep = (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)