linux中进程切换命令,linux系统切换到命令行

Linux 史上最全命令大全

1、ls命令

我们提供的服务有:成都网站设计、网站制作、微信公众号开发、网站优化、网站认证、建安ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的建安网站制作公司

cd /root

ls #显示当前目录下所有的非隐藏文件

ls -a #显示当前目录下所有文件,包含隐藏文件

ls -l #显示当前目录下所有的非隐藏文件的详情

ls -al #显示当前目录下所有文件,包含隐藏文件 的详情

ls -lh #以列表形式显示当前目录下所有的非隐藏文件的大小(K M T)

ls -alh #以列表形式显示所有文件,包含隐藏文件的文件大小(K M T)

常用的组合:

ls

ll #等价于 ls -l

ls /etc #显示/etc目录下的文件

2:pwd命令

用来显示当前所在的路径

绝对路径: 从/目录开始的路径

/root

/etc/sysconf

/opt/server/data-integration/libswt/win64

相对路径: 相对当前的路径

3、mkdir命令

cd /root

mkdir mytest #在当前目录创建文件夹

mkdir -p 111/222/333 #一次创建多级文件夹

mkdir /root/mydemo #使用绝对路径来创建

mkdir mydemo2 #使用相对对路径来创建

4、rm命令

这个命令既可以删除文件,也可以删除目录

删文件:

cd /root

rm a.txt #删除时,会给出提醒确认,输入y删除,n不删除

rm -f b.txt #强制删除 等价于 rm -f /root/b.txt

rm ../dir2/b.txt

touch a.java b.java c.java

rm a.java b.java c.java #一次可以删除多个文件

rm *.java -fr #可以删除当前目录下的所有.java文件

cd dir

rm * -fr #删除当前目录的所有内容

删目录:

rm -r 111 #删除目录,依次提醒删除

rm -rf mytest #强制删除 等价于 rm mytest -fr

常用组合:

rm -fr 文件或目录

5、cd命令

cd 命令可以进入一个目录,类似于对windows上的文件夹进行双击

cd #直接cd 可以从任何一个目录回到/root目录

cd /root #进入root目录

cd /opt/server/data-integration/system/

cd .. #回到上一级目录

cd ../.. #回到上上一级目录

cd - #可以在最近的两次目录之间切换

cd /root

mdkir dir1 dir2

cd dir1

cd ../dir2 #使用相对路径 /中国/广东省/深圳市/宝安区/留仙二路/78号

6、历史命令和table补全

使用上下方向键可以找出历史命令

table键:

cd /opt/ #两次table可以列出/opt目录下所有的文件和子目录

cd /opt/s #一次table可以自动补全目录内容,前提是/opt目录下只有一个s开头的目录

7、touch命令

cd /root

touch a.java #在当前目录创建a.txt文件

touch b.java c.java #创建多个文件

touch /root/d.java #通过绝对路径创建

8、mv命令

移动:

1、mv 文件 目录 #将文件移动到目录中区

cd /root/dir1

touch a.txt

mv a.txt /root/dir2 #等价于 mv a.txt ../dir2

2、 mv 目录1 目录2 #将目录1移动到目录2下面(前提是目录2必须存在)

cd /root

mv dir2 dir1 #将dir2移动到dir1下面

重命名:

1、mv 文件1 文件2 #给文件重命名(文件2不能存在)

cd /root

mv a.txt aaa.txt #将a.txt 重命名为aaa.txt

2、mv 目录1 目录2 #给目录重命名(目录2不能存在)

cd /root

mv dir1 dirx #将dir1重命名为dirx

9、cat命令

显示文件内容

cd /root

cat user.txt

10、cp命令

复制文件

cd /root

cp user.txt user2.txt

cp user.txt /opt/ #将当前目录的user.txt 复制到/opt目录,文件名保持不变

cp user.txt /opt.user2.txt #将当前目录的user.txt 复制到/opt目录,文件名改为user2.txt

cp /opt/server/data-integration/pan.sh ./ #将指定目录里的文件复制到当前目录(.后边的/可以去掉)

cp /opt/server/data-integration/pan.sh ./dirx #将指定目录里的文件复制到当前目录下的dirx目录(.后边的/比可以去掉)

cp /opt/server/data-integration/pan.sh /root/dirx #作用同上

11、解压和压缩

Linux的压缩包后缀一般是: .tar.gz

解压:

.tar.gz

将snappy-1.1.1.tar.gz上传到/root/dir1目录

tar -zxvf snappy-1.1.1.tar.gz #默认解压到当前目录

tar -xvf snappy-1.1.1.tar.gz #默认解压到当前目录

tar -xvf snappy-1.1.1.tar.gz -C /opt #将压缩包解压到/opt目录

.zip格式

unzip mysql-connector-java-8.0.13.zip #默认解压到当前目录

unzip -d /opt mysql-connector-java-8.0.13.zip #解压到指定目录

压缩:

.tar.gz

tar -czvf snappy-1.1.1.tar.gz snappy-1.1.1 #将snappy-1.1.1文件夹进行打包压缩

tar -czvf /root/dir/snappy-1.1.1.tar.gz /opt/server/snappy-1.1.1

.zip格式

zip -r mysql-connector-java-8.0.13.zip mysql-connector-java-8.0.13/

12、find命令

用来实现文件的查找

find / -name 'a.txt' #从/目录开始查找a.txt文件

find / -name 'ins*' #从/目录开始查找以ins开头的文件

find / -type f -size +100M #查找/目录下文件大小大于100M的文件

13、grep命令

grep lang anaconda-ks.cfg #从anaconda-ks.cfg文件中查找包含lang的内容

14、ps命令

ps #查看依赖终端的进程

ps -ef #查看Linux系统中所有的进程

15、kill命令

kill -9 进程的pid #每次启动进程时,pid会发生变化,但是进程运行期间pid不会变化

16、管道 |

管道就是把前边命令的结果作为后边命令的输入

ps -ef | grep mysql #查找和mysql相关的进程

ll /etc | grep java #在/etc目录中查找java相关的文件

17、用户的操作

用户创建和密码设置

useradd itheima #创建新用户itheima

passwd itheima #设置用户itheima密码

用户删除

userdel -r itheima #删除用户itheima

18、文件的权限

所属用户: root 文件的创建者

所属用户组: root 和文件创建者在一个组的用户

其他用户: itcast 既不是文件创建者,也和文件创建者不在同一组

r: 可读

w:可写

x: 可执行

chmod命令:

方式1:

chmod u+rw a.txt #在所属用户之前的权限基础上添加可读和可写权限

chmod u=rw a.txt #将所属用户的权限直接修改为可读,可写

chmod +x #给所属用户,所属用户组和其他用户全部加上可执行权限

方式2:

chmod 777 a.txt #给所有用户加上所有权限

19、clear命令

用来清屏

快捷键: ctrl + l

20、history命令

用来查看所有的历史命令

21:vi编辑器的使用

vi a.txt #打开a.txt文件

vim a.txt #vim是vi的增强

22、网络管理命令

hostname :查看主机名

修改主机名: /etc/hostname

ifconfig :查看ip地址

修改ip地址: /etc/sysconfig/network-scripts/ifcfg-ens33

服务问题:

service network restart

新手必须掌握的linux命令

常见执行Linux命令的格式是这样的:

注意,命令名称、命令参数、命令对象之间请用空格键分隔。

命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀。

命令参数的长格式与短格式示例

1.echo命令

2.date命令

3.reboot命令

4.poweroff命令

5.wget命令

6.ps命令

7.top命令

8.pidof命令

9.kill命令

10.killall命令

如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl + C组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。

或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个符号,这样命令将进入系统后台来执行。

1.ifconfig命令

2.uname命令

3.uptime命令

4.free命令

5.who命令

6.last命令

7.history命令

8.sosreport命令

三、工作目录切换命令

1.pwd命令

2.cd命令

3.ls命令

四、文本文件编辑命令

1.cat命令

2.more命令

3.head命令

4.tail命令

5.tr命令

6.wc命令

7.stat命令

8.cut命令

9.diff命令

五、文件目录管理命令

1.touch命令

2.mkdir命令

3.cp命令

4.mv命令

5.rm命令

6.dd命令

7.file命令

六、打包压缩与搜索命令

1.tar命令

2.grep命令

3.find命令

Linux 进程管理之进程调度与切换

我们知道,进程运行需要各种各样的系统资源,如内存、文件、打印机和最

宝贵的 CPU 等,所以说,调度的实质就是资源的分配。系统通过不同的调度算法(Scheduling Algorithm)来实现这种资源的分配。通常来说,选择什么样的调度算法取决于资源分配的策略(Scheduling Policy)。

有关调度相关的结构保存在 task_struct 中,如下:

active_mm 是为内核线程而引入的,因为内核线程没有自己的地址空间,为了让内核线程与普通进程具有统一的上下文切换方式,当内核线程进行上下文切换时,让切换进来的线程的 active_mm 指向刚被调度出去的进程的 active_mm(如果进程的mm 域不为空,则其 active_mm 域与 mm 域相同)。

在 linux 2.6 中 sched_class 表示该进程所属的调度器类有3种:

进程的调度策略有5种,用户可以调用调度器里不同的调度策略:

在每个 CPU 中都有一个自身的运行队列 rq,每个活动进程只出现在一个运行队列中,在多个 CPU 上同时运行一个进程是不可能的。

运行队列是使用如下结构实现的:

tast 作为调度实体加入到 CPU 中的调度队列中。

系统中所有的运行队列都在 runqueues 数组中,该数组的每个元素分别对应于系统中的一个 CPU。在单处理器系统中,由于只需要一个就绪队列,因此数组只有一个元素。

内核也定义了一下便利的宏,其含义很明显。

Linux、c/c++服务器开发篇-------我们来聊聊进程的那些事

Linux内核 进程间通信组件的实现

学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括 C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享

在分析调度流程之前,我们先来看在什么情况下要执行调度程序,我们把这种情况叫做调度时机。

Linux 调度时机主要有。

时机1,进程要调用 sleep() 或 exit() 等函数进行状态转换,这些函数会主动调用调度程序进行进程调度。

时机2,由于进程的时间片是由时钟中断来更新的,因此,这种情况和时机4 是一样的。

时机3,当设备驱动程序执行长而重复的任务时,直接调用调度程序。在每次反复循环中,驱动程序都检查 need_resched 的值,如果必要,则调用调度程序 schedule() 主动放弃 CPU。

时机4 , 如前所述, 不管是从中断、异常还是系统调用返回, 最终都调用 ret_from_sys_call(),由这个函数进行调度标志的检测,如果必要,则调用调用调度程序。那么,为什么从系统调用返回时要调用调度程序呢?这当然是从效率考虑。从系统调用返回意味着要离开内核态而返回到用户态,而状态的转换要花费一定的时间,因此,在返回到用户态前,系统把在内核态该处理的事全部做完。

Linux 的调度程序是一个叫 Schedule() 的函数,这个函数来决定是否要进行进程的切换,如果要切换的话,切换到哪个进程等。

从代码分析来看,Schedule 主要完成了2个功能:

进程上下文切换包括进程的地址空间的切换和执行环境的切换。

对于 switch_mm 处理,关键的一步就是它将新进程页面目录的起始物理地址装入到寄存器 CR3 中。CR3 寄存器总是指向当前进程的页面目录。

switch_to 把寄存器中的值比如esp等存放到进程thread结构中,保存现场一边后续恢复,同时调用 __switch_to 完成了堆栈的切换。

在进程的 task_struct 结构中有个重要的成分 thread,它本身是一个数据结构 thread_struct, 里面记录着进程在切换时的(系统空间)堆栈指针,取指令地址(也就是“返回地址”)等关键性的信息。

关于__switch_to 的工作就是处理 TSS (任务状态段)。

TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。

linux 为每一个 CPU 提供一个 TSS 段,并且在 TR 寄存器中保存该段。

linux 中之所以为每一个 CPU 提供一个 TSS 段,而不是为每个进程提供一个TSS 段,主要原因是 TR 寄存器永远指向它,在任务切换的适合不必切换 TR 寄存器,从而减小开销。

在从用户态切换到内核态时,可以通过获取 TSS 段中的 esp0 来获取当前进程的内核栈 栈顶指针,从而可以保存用户态的 cs,esp,eip 等上下文。

TSS 在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。

在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到 TR(任务寄存器)所指定的任务的 TSS 中;然后,下一任务的 TSS 被装入 TR;最后,从 TR 所指定的 TSS 中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在 TSS 中保存任务现场各寄存器状态的完整映象,实现任务的切换。

因此,__switch_to 核心内容就是将 TSS 中的内核空间(0级)堆栈指针换成 next-esp0。这是因为 CPU 在穿越中断门或者陷阱门时要根据新的运行级别从TSS中取得进程在系统空间的堆栈指针。

thread_struct.esp0 指向进程的系统空间堆栈的顶端。当一个进程被调度运行时,内核会将这个变量写入 TSS 的 esp0 字段,表示这个进程进入0级运行时其堆栈的位置。换句话说,进程的 thread_struct 结构中的 esp0 保存着其系统空间堆栈指针。当进程穿过中断门、陷阱门或者调用门进入系统空间时,处理器会从这里恢复期系统空间栈。

由于栈中变量的访问依赖的是段、页、和 esp、ebp 等这些寄存器,所以当段、页、寄存器切换完以后,栈中的变量就可以被访问了。

因此 switch_to 完成了进程堆栈的切换,由于被切进的进程各个寄存器的信息已完成切换,因此 next 进程得以执行指令运行。

由于 A 进程在调用 switch_to 完成了与 B 进程堆栈的切换,也即是寄存器中的值都是 B 的,所以 A 进程在 switch_to 执行完后,A停止运行,B开始运行,当过一段时间又把 A 进程切进去后,A 开始从switch_to 后面的代码开始执行。

schedule 的调用流程如下:

linux 进程中切换用户

可以使用su命令来切换用户,su是switch user切换用户的缩写。可以是从普通用户切换到root用户,也可以是从root用户切换到普通用户。从普通用户切换到root用户需要输入密码,从root用户切换到普通用户不需要输入密码。

命令格式:su [参数] [-] [用户名]

用户名的默认值为root。

用法示例:

su zhidao #切换到zhidao用户

su #切换到root用户


当前文章:linux中进程切换命令,linux系统切换到命令行
标题链接:http://ybzwz.com/article/heogsp.html