文章目录
1. chapter5:理解shell
1. shell父子关系
通过PPID列显示出谁是谁的父进程
[hadoop@hadoop1 ~]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
hadoop 13768 13767 0 22:46 pts/1 00:00:00 -bash
hadoop 13805 13768 0 22:47 pts/1 00:00:00 ps -ef
-bash当前的终端,起进程号:13768
ps -ef是子进程。
查看进程树形图
[hadoop@hadoop1 ~]$ bash
[hadoop@hadoop1 ~]$ bash
[hadoop@hadoop1 ~]$ bash
[hadoop@hadoop1 ~]$ ps --forest
PID TTY TIME CMD
13768 pts/1 00:00:00 bash
13823 pts/1 00:00:00 \_ bash
13843 pts/1 00:00:00 \_ bash
13866 pts/1 00:00:00 \_ bash
13886 pts/1 00:00:00 \_ ps
在上面的例子中,bash命令被输入了三次。这实际上创建了三个子shell。ps -forest命令 展示了这些子shell间的嵌套结构。下图中也展示了这种关系。

可以利用exit命令有条不紊地退出子shell。
bash命令行参数
| 参数 | 描述 |
|---|---|
| -c string | 从string中读取命令并进行处理 |
| -l | 启动一个能够接收用户输入的交互shell |
| -r | 以登录shell的形式启动 |
| -s | 启动一个受限shell,用户会被限制在默认目录中 从标准输入中读取命令 |
如:
sudo bash -c 'su - hadoop'
2. 进程列表
(1) 直接;分隔——非进程列表
[hadoop@hadoop1 ~]$ ls;pwd
all-hadoop.tar.gz bigdata hadoop-current java-current mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar spark-current
/home/hadoop
(2) (;)分隔——进程列表
[hadoop@hadoop1 ~]$ (ls;pwd)
all-hadoop.tar.gz bigdata hadoop-current java-current mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar spark-current
/home/hadoop
进程列表是一种命令分组
(commandgrouping)。另一种命令分组是将命令放入花括号中, 并在命令列表尾部加上分号(;)。语法为{ command; }。使用花括号进行命令分组并不会像进程列表那样创建出子shell。
(3) echo $BASH_SUBSHELL
echo $BASH_SUBSHELL。如果该命令返回0,就表明没有子shell。如果返回 1或者其他更大的数字,就表明存在子shell。
3. 后台模式
(1) 命令结尾&
[hadoop@hadoop1 ~]$ sleep 100&
后台slepp 100s。
(1) 可以通过ps或jobs查看后台进程。
[hadoop@hadoop1 ~]$ ps -ef
hadoop 15887 15886 0 14:01 pts/1 00:00:00 -bash
hadoop 16031 15887 0 14:35 pts/1 00:00:00 sleep 100
hadoop 16033 15887 0 14:35 pts/1 00:00:00 ps -ef
(2) 或者(jobs 或 jobs -l):
[hadoop@hadoop1 ~]$ jobs -l
[2]+ 16031 Running sleep 100 &
(2) 进程列表置后台
实用示例:
$ (tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&
(3) 协程
4. 内建命令
which与type命令均可找到一个命令的位置。
[hadoop@hadoop1 ~]$ type -a java
java is /tools/java-current/bin/java
[hadoop@hadoop1 ~]$ type echo
echo is a shell builtin
[hadoop@hadoop1 ~]$ type -a echo
echo is a shell builtin
echo is /bin/echo
命令type -a显示出了每个命令的两种实现。注意,which命令只显示出了外部命令文件。
(1) history -> .bash_history 历史命令记录,存于该文件
(2) alias -p 查看默认别名
本文深入探讨shell环境中进程的父子关系,展示如何使用ps命令查看进程树形图,解析bash命令行参数的功能,介绍进程列表的创建与区别,演示后台模式的运用,包括命令结尾加&符号的技巧及协程的概念,最后讲解内建命令的使用方法。
1296

被折叠的 条评论
为什么被折叠?



