table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}
188、尽管ps的输出最初是静态的,但可以通过将ps和watch结合使用使其变为动态。我们将监控Apache HTTPD Web服务器的新连接。请输入一个使用watch、ps和grep来查看apache2连接的命令。
watch 'ps aux | grep apache2' 或 watch "ps aux | grep apache2"
189、虽然最初
ps
的输出是静态的,但可以通过结合
ps
和
watch
使其动态化。我们将监控Apache HTTPD Web服务器的新连接。现在打开一个Web浏览器或使用像
lynx
这样的命令行浏览器,通过其IP地址与Web服务器建立连接。你在
watch
的输出中观察到了什么?
ps
ps
watch
lynx
watch
其中一个由
www-data
拥有的子进程消失了。
190、启动 Web 服务器。确保你知道父进程的 PID。通过向父进程发送 SIGHUP 信号来重启 Apache HTTPD Web 服务器。检查父进程未被杀死且已生成新的子进程。
启动 Web 服务器:
$ sudo systemctl start apache2
确定父进程 PID:
$ ps aux | grep apache2 # 父进程由 root 用户启动
发送 SIGHUP 信号重启服务器:
$ kill -SIGHUP [父进程 PID]
检查父进程和子进程状态:
$ ps aux | grep apache2
191、在Apache2的配置文件中添加值为1的MaxConnectionsPerChild指令(在Debian及其衍生系统中,该配置文件位于/etc/apache2/apache2.conf;在CentOS系列中,位于/etc/httpd/conf/httpd.conf)。别忘了重启Apache2使更改生效。输入一个使用watch、ps和grep来监控Apache2连接的命令。现在打开一个网页浏览器或使用像lynx这样的命令行浏览器,通过其IP地址建立与Web服务器的连接。在watch的输出中你观察到了什么?
使用的命令为:
$ watch 'ps aux | grep apache2'
或
$ watch "ps aux | grep apache2"
观察到的现象为:一个由
www-data
拥有的子进程消失了。
192、启动 top 命令,使任务按内存使用情况排序。通过高亮显示内存列来验证你输入的命令是否正确。
启动 top 按内存使用排序:$ top -o %MEM;验证命令:按 x
193、使用两个不同的命令来查找由 Apache HTTPD 网络服务器(apache2)派生的所有进程的 PID。
可以使用
pidof apache2
和
pgrep apache2
这两个命令来查找由 Apache HTTPD 网络服务器(apache2)派生的所有进程的 PID。
194、不使用进程 ID,用两条不同的命令终止所有 apache2 进程。
可以使用以下两条命令:$ pkill apache2 或 $ killall apache2
195、假设你需要终止所有 apache2 实例,且没有时间去查找它们的 PID。如何使用 kill 命令结合默认的 SIGTERM 信号以单行命令完成此操作?
可以使用以下命令:
kill $(pgrep apache2)
kill
pgrep apache2“
kill $(pidof apache2)
kill
pidof apache2“
196、启动top并与之交互,执行以下操作:显示进程的树形视图。
启动top后,按V键可显示进程的树形视图。
197、启动 top 并与之交互,完成以下操作:显示区分用户空间进程和内核空间进程的进程完整路径。
启动
top
后,按
c
键可显示程序的绝对路径并区分用户空间进程和内核空间进程(内核空间进程用方括号表示)。
198、使用 BSD 语法输入 ps 命令来显示由 Apache HTTPD 网络服务器用户(www – data)启动的所有进程。
ps U www-data
199、使用GNU语法输入ps命令来显示由Apache HTTPD Web服务器用户(www – data)启动的所有进程。
ps –user www-data
200、SIGHUP信号可用于重启某些守护进程。以Apache HTTPD Web服务器为例,向父进程(由init启动的进程)发送SIGHUP信号会终止其子进程,之后父进程会重新读取其配置文件、重新打开日志文件并生成一组新的子进程。如何启动Apache HTTPD Web服务器?
使用命令:$ sudo systemctl start apache2
201、SIGHUP信号可用于重启某些守护进程。以Apache HTTPD Web服务器为例,向父进程(由init启动的进程)发送SIGHUP信号会终止其子进程,且父进程会重新读取其配置文件、重新打开日志文件并生成一组新的子进程。那么如何查看Apache HTTPD Web服务器父进程的PID呢?
可以使用命令
$ ps aux | grep apache2
来查看,父进程是由 root 用户启动的进程。
202、如何通过向Apache HTTPD Web服务器的父进程发送SIGHUP信号来重启该服务器?
需要按以下步骤操作:
启动Web服务器:
bash
$ sudo systemctl start apache2
确定父进程的PID:
bash
$ ps aux | grep apache2
父进程是由root用户启动的,假设这里PID为1653;
向父进程发送SIGHUP信号以重启Apache HTTPD Web服务器:
bash
$ kill -SIGHUP 1653
检查父进程未被终止且已生成新的子进程:
bash
$ ps aux | grep apache2
203、SIGHUP信号可以作为重启某些守护进程的一种方式。以Apache HTTPD Web服务器为例,向父进程(由init启动的那个进程)发送SIGHUP信号会终止其子进程。然而,父进程会重新读取其配置文件、重新打开日志文件并生成一组新的子进程。如何检查父进程是否未被终止以及是否生成了新的子进程?
可以使用命令
$ ps aux | grep apache2
进行检查,此时应该能看到父
apache2
进程和两个新的子进程。
204、虽然
ps
命令的输出最初是静态的,但可以通过将
ps
和
watch
结合使用使其动态化。我们将监控Apache HTTPD Web服务器的新连接情况。需要在apache2的配置文件中添加值为1的
MaxConnectionsPerChild
指令,在Debian及其派生系统中,该配置文件位于
/etc/apache2/apache2.conf
;在CentOS系列中,位于
/etc/httpd/conf/httpd.conf
。添加完成后,要重启apache2以使更改生效。请说明具体操作步骤。
ps
ps
watch
MaxConnectionsPerChild
/etc/apache2/apache2.conf
/etc/httpd/conf/httpd.conf
在 Debian 及其派生系统中,编辑
/etc/apache2/apache2.conf
文件,添加:
MaxConnectionsPerChild 1
在 CentOS 系列中,编辑
/etc/httpd/conf/httpd.conf
文件,添加:
MaxConnectionsPerChild 1
然后使用以下命令重启 apache2:
sudo systemctl restart apache2
205、使用命令 $ sudo systemctl start apache2 启动 Web 服务器;使用命令 $ ps aux | grep apache2 确定父进程的 PID;使用命令 $ kill -SIGHUP [PID] 向父进程发送 SIGHUP 信号使 Apache HTTPD Web 服务器重启;使用命令 $ ps aux | grep apache2 检查父进程未被杀死且已生成新的子进程。
这一系列步骤的操作如下:
首先,使用命令
sudo systemctl start apache2
启动 Apache HTTPD Web 服务器。
接着,使用
ps aux | grep apache2
命令查看进程信息,找到由 root 用户启动的父进程及其 PID。
然后,使用
kill -SIGHUP [PID]
(将
[PID]
替换为实际的父进程 PID)向父进程发送 SIGHUP 信号,使服务器重启。
最后,再次使用
ps aux | grep apache2
命令,此时应能看到父进程以及两个新的子进程,以此确认父进程未被杀死且新的子进程已生成。
206、在 Apache2 的配置文件中添加值为 1 的 MaxConnectionsPerChild 指令(在 Debian 及其衍生系统中,该文件位于 /etc/apache2/apache2.conf;在 CentOS 系列中,位于 /etc/httpd/conf/httpd.conf),并重启 Apache2;输入一个使用 watch、ps 和 grep 来监控 Apache2 连接的命令;打开一个网页浏览器或使用如 lynx 这样的命令行浏览器,通过其 IP 地址与 Web 服务器建立连接,并说明在 watch 的输出中观察到了什么。
添加指令并重启 Apache2:在 Debian 及其衍生系统的
/etc/apache2/apache2.conf
或 CentOS 系列的
/etc/httpd/conf/httpd.conf
中添加
MaxConnectionsPerChild 1
这一行,然后使用
sudo systemctl restart apache2
重启。
输入监控命令:
bash
$ watch 'ps aux | grep apache2'
或
bash
$ watch "ps aux | grep apache2"
建立连接后观察:一个由
www-data
拥有的子进程会消失。
207、使用命令 $ top -o %MEM 启动 top 并按内存使用情况对任务进行排序;通过高亮显示内存列来验证你输入的命令是否正确(按 x)
先执行命令
$ top -o %MEM
启动
top
并按内存使用情况排序任务。
再按
x
键高亮显示内存列以验证命令输入是否正确。
208、如何使用 ps 命令仅显示有关用户、内存使用百分比、CPU 时间使用百分比和完整命令的信息,以及如何使用 ps 命令仅显示用户及其正在使用的程序名称的信息?
要仅显示有关用户、内存使用百分比、CPU 时间使用百分比和完整命令的信息,可使用命令:
$ ps o user,%mem,%cpu,cmd
要仅显示用户及其正在使用的程序名称的信息,可使用命令:
$ ps o user,comm
209、指出以下陈述/特性对应于GNU Screen、tmux还是两者皆有:特性/陈述:默认命令前缀为Ctrl + a;客户端 – 服务器模型;面板是伪终端;杀死一个区域不会杀死其关联的窗口;会话包含窗口;会话可以分离。
默认命令前缀为
Ctrl + a
:GNU Screen;
客户端 – 服务器模型:GNU Screen、tmux;
面板是伪终端:GNU Screen、tmux;
杀死一个区域不会杀死其关联的窗口:GNU Screen、tmux;
会话包含窗口:GNU Screen、tmux;
会话可以分离:GNU Screen、tmux
210、在你的计算机上安装GNU Screen(包名:screen)并完成以下任务:启动该程序,使用什么命令?启动top命令;使用screen的键前缀,打开一个新窗口,然后使用vi打开 /etc/screenrc;在屏幕底部列出窗口;将当前窗口的名称更改为vi;将剩余窗口的名称更改为top。为此,首先显示所有窗口的列表,以便你可以上下移动并选择正确的窗口;再次在屏幕底部显示窗口名称,检查名称是否已更改;现在,分离当前会话并让screen创建一个名为ssh的新会话;也从ssh会话中分离出来,并让screen显示会话列表;现在,使用其PID连接到第一个会话;你应该回到显示top的窗口。水平分割窗口并移动到新的空白区域;让screen列出所有窗口并选择vi显示在新的空白区域;现在,垂直分割当前区域,移动到新创建的空白区域并将其与一个全新的窗口关联;终止除当前区域之外的所有区域(请记住,虽然你杀死了区域,但窗口仍然存在)。然后,退出当前会话的所有窗口,直到会话本身终止;最后,让screen再次列出其会话,通过PID杀死剩余的ssh会话,并检查实际上是否没有剩余会话。
启动程序:通常使用
screen
命令。
启动top:在screen会话中输入
top
并按回车键。
打开新窗口并使用vi打开
/etc/screenrc
:按
Ctrl + a c
打开新窗口,然后输入
vi /etc/screenrc
并按回车键。
列出窗口:按
Ctrl + a w
。
将当前窗口名称改为vi:按
Ctrl + a A
,输入
vi
并按回车键。
将剩余窗口名称改为top:按
Ctrl + a "
,用箭头键选择窗口,按
Ctrl + a A
,输入
top
并按回车键。
检查名称更改:按
Ctrl + a w
。
分离会话并创建名为ssh的新会话:按
Ctrl + a d
,输入
screen -S "ssh"
并按回车键。
从ssh分离并显示会话列表:按
Ctrl + a d
,输入
screen -list
或
screen -ls
。
使用PID连接到第一个会话:输入
screen -r <实际PID>
。
水平分割窗口并移动到新区域:按
Ctrl + a S
,按
Ctrl + a Tab
。
列出窗口并选择vi显示在新区域:按
Ctrl + a "
,标记
vi
并按回车键。
垂直分割区域、移动到新区域并关联新窗口:按
Ctrl + a |
,按
Ctrl + a Tab
,按
Ctrl + a c
。
终止区域和退出窗口:按
Ctrl + a Q
,输入
exit
退出Bash;在vi中按
Shift + :
,输入
quit
并按回车键。
列出会话、杀死ssh会话并检查:输入
screen -ls
,输入
screen -X -S <实际PID> quit
,再次输入
screen -ls
检查。
211、在你的计算机上安装tmux(包名:tmux)并完成以下任务:启动程序,使用什么命令?启动top(注意在几秒钟内,状态栏中窗口名称会变为top);使用tmux的键前缀,打开一个新窗口,然后使用nano创建~/.tmux.conf;垂直分割窗口并多次减小新创建窗格的大小;现在将当前窗口的名称更改为文本编辑,然后让tmux显示所有会话的列表;使用相同的键组合移动到运行top的窗口并返回当前窗口;从当前会话分离并创建一个名为ssh且窗口名为ssh window的新会话;也从ssh会话分离并再次让tmux显示会话列表;现在,启动一台远程机器并通过ssh连接到你的本地主机。连接建立后,检查tmux会话;在远程主机上,按名称附加到ssh会话;回到你的本地机器,在确保与远程主机的连接先终止的情况下,按名称附加到ssh会话;显示所有会话以供选择并转到你的第一个会话([0])。到达后,按名称杀死ssh会话;最后,从当前会话分离并按名称杀死它。
# Tmux 常用命令说明
## 启动程序
- 启动 tmux 程序命令:`tmux`
- 启动 top 命令:`top`
## 窗口操作
- 打开新窗口并创建 `~/.tmux.conf`:
- 先按 `Ctrl + b`,再按 `c`
- 然后输入 `nano ~/.tmux.conf`
- 垂直分割窗口并减小窗格大小:
- 先按 `Ctrl + b`,再按 `"`
- 然后按 `Ctrl + b`,接着按 `Ctrl + ↓`
- 更改窗口名称并显示会话列表:
- 先按 `Ctrl + b`,再按 `,`
- 输入新名称并按回车
- 然后按 `Ctrl + b`,再按 `s`
- 或输入 `tmux ls`
## 会话操作
- 分离当前会话并创建新会话:
- 先按 `Ctrl + b`,再按 `d`
- 然后输入 `tmux new -s "ssh" -n "ssh window"`
- 分离 ssh 会话并显示会话列表:
- 先按 `Ctrl + b`,再按 `d`
- 然后输入 `tmux ls`
- 在远程主机附加到 ssh 会话:
- `tmux a -t ssh`(`a` 可替换为 `at` 或 `attach`)
- 本地机器附加到 ssh 会话:
- `tmux a -d -t ssh`(`a` 可替换为 `at` 或 `attach`)
- 选择会话并杀死 ssh 会话:
- 先按 `Ctrl + b`,再按 `s`
- 用箭头键选择会话 0 并按回车
- 然后输入 `tmux kill-session -t ssh`
- 分离并杀死当前会话:
- 先按 `Ctrl + b`,再按 `d`
- 然后输入 `tmux kill-session -t 0`
## 移动窗口
- 移动到下一个窗口:`Ctrl + b`,然后按 `n`
- 移动到上一个窗口:`Ctrl + b`,然后按 `p`
212、screen和tmux都可以通过命令前缀 + : 进入命令行模式。在命令行模式下进行操作,完成以下任务:使screen进入复制模式;使tmux重命名当前窗口;使screen关闭所有窗口并终止会话;使tmux将一个窗格拆分为两个;使tmux关闭当前窗口。
使screen进入复制模式
:
Ctrl + a :
,然后输入
copy
使tmux重命名当前窗口
:
Ctrl + b :
,然后输入
rename-window
使screen关闭所有窗口并终止会话
:
Ctrl + a :
,然后输入
quit
使tmux将一个窗格拆分为两个
:
Ctrl + b :
,然后输入
split-window
使tmux关闭当前窗口
:
Ctrl + b :
,然后输入
kill-window
213、当你在 screen 中进入复制模式时,不仅可以使用箭头键、PgUp 或 PgDown 来浏览当前窗口和滚动缓冲区,还可以使用类似 vi 的全屏编辑器。使用此编辑器完成以下任务:◦ 在你的 screen 终端中输出 supercalifragilisticexpialidocious;◦ 现在,复制光标正上方一行中从左到右连续的五个字符;◦ 最后,将所选内容(stice)粘贴回你的命令提示符处。
在 screen 终端中输出 supercalifragilisticexpialidocious:输入
bash
echo supercalifragilisticexpialidocious
复制光标正上方一行中从左到右连续的五个字符:
– 先通过
Ctrl + a - [
或
Ctrl + a - :
然后输入
copy
进入复制模式
– 接着使用
k
移动到上一行
– 按空格标记选择的起始位置
– 再使用
l
向前移动四个字符
– 按空格标记选择的结束位置
将所选内容(
stice
)粘贴回命令提示符处:按
bash
Ctrl + a - ]
214、假设你想与另一个用户共享一个tmux会话(our_session)。你已经创建了具有正确权限的套接字(/tmp/our_socket),以便你和另一个用户都可以读写。为了让第二个用户能够通过tmux -S /tmp/our_socket a -t成功附加到该会话,还应满足哪两个条件?
两个用户必须有一个共同的组,例如
multiplexer
;
必须将套接字的所属组更改为该共同的组,使用命令:
bash
chgrp multiplexer /tmp/our_socket
215、screen和tmux都可以通过命令前缀 + : 进入命令行模式。在命令行模式下完成以下任务:让screen进入复制模式;让tmux重命名当前窗口;让screen关闭所有窗口并终止会话;让tmux将一个窗格分割成两个;让tmux关闭当前窗口。
常用命令整理
让screen进入复制模式
:
按下
Ctrl + a :
然后输入
copy
让tmux重命名当前窗口
:
按下
Ctrl + b :
然后输入
rename -window
让screen关闭所有窗口并终止会话
:
按下
Ctrl + a :
然后输入
quit
让tmux将一个窗格分割成两个
:
按下
Ctrl + b :
然后输入
split -window
让tmux关闭当前窗口
:
按下
Ctrl + b :
然后输入
kill -window
216、当你在 screen 中进入复制模式时,不仅可以使用方向键、PgUP 或 PgDown 来浏览当前窗口和滚动缓冲区,还可以使用类似 vi 的全屏编辑器。使用此编辑器完成以下任务:在 screen 终端中输出 supercalifragilisticexpialidocious;复制光标正上方一行中从左到右连续的五个字符;最后,将所选内容粘贴回命令提示符处。
在 screen 终端中输出
supercalifragilisticexpialidocious
:
输入
echo supercalifragilisticexpialidocious
。
复制光标正上方一行中从左到右连续的五个字符:
进入复制模式(
Ctrl + a - [
或
Ctrl + a - :
然后输入
copy
),
使用
k
键移动到上一行,按空格键标记选择的起始位置,
使用
l
键向前移动四个字符,再按空格键标记选择的结束位置。
将所选内容粘贴回命令提示符处:
按
Ctrl + a - ]
。
217、假设你想与另一个用户共享一个tmux会话(our_session)。你已经创建了具有正确权限的套接字(/tmp/our_socket),以便你和另一个用户都可以读写。为了让第二个用户能够通过tmux -S /tmp/our_socket a -t our_session成功附加到该会话,还应满足哪两个条件?
两个用户必须有一个共同的组,例如
multiplexer
;
必须将套接字的所属组更改为该共同组,使用命令:
bash
chgrp multiplexer /tmp/our_socket
218、screen和tmux都可以通过命令前缀 + : 进入命令行模式。在命令行模式下完成以下任务:- 让screen进入复制模式。- 让tmux重命名当前窗口。- 让screen关闭所有窗口并终止会话。- 让tmux将一个窗格分割成两个。- 让tmux关闭当前窗口。
让screen进入复制模式
:按下
Ctrl + a
,然后输入
copy
。
让tmux重命名当前窗口
:按下
Ctrl + b
,然后输入
rename-window
。
让screen关闭所有窗口并终止会话
:按下
Ctrl + a
,然后输入
quit
。
让tmux将一个窗格分割成两个
:按下
Ctrl + b
,然后输入
split-window
。
让tmux关闭当前窗口
:按下
Ctrl + b
,然后输入
kill-window
。
219、当你在 screen 中进入复制模式时,不仅可以使用箭头键、PgUp 或 PgDown 来浏览当前窗口和滚动缓冲区,还可以使用类似 vi 的全屏编辑器。使用此编辑器完成以下任务:- 在你的 screen 终端中输出 supercalifragilisticexpialidocious。- 现在,复制光标正上方一行中从左到右连续的五个字符。- 最后,将所选内容(stice)粘贴回你的命令提示符处。
在 screen 终端中输入:
bash
echo supercalifragilisticexpialidocious
进入复制模式:
Ctrl + a - [
或
Ctrl + a - :
然后输入
copy
,使用
k
键移动到上一行,按
Space
键标记选择的起始位置,使用
l
键向前移动四个字符,再按
Space
键标记选择的结束位置。
粘贴所选内容:
Ctrl + a - ]
220、在一个抢占式多任务系统中,当一个低优先级进程正在占用处理器,而一个高优先级进程已排队等待执行时,会发生什么情况?
低优先级进程暂停,高优先级进程将取而代之开始执行。
221、考虑以下 ps -el 列表:F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 – 42855 – ? 00:09:59 systemd 1 S 0 2 0 0 80 0 – 0 – ? 00:00:02 kthreadd 1 I 0 3 2 0 60 -20 – 0 – ? 00:00:00 rcu_gp 1 S 0 9 2 0 80 0 – 0 – ? 00:00:49 ksoftirqd/0 1 I 0 10 2 0 80 0 – 0 – ? 00:18:26 rcu_sched 1 I 0 11 2 0 80 0 – 0 – ? 00:00:00 rcu_bh 1 S 0 12 2 0 -40 – – 0 – ? 00:00:08 migration/0 1 S 0 14 2 0 80 0 – 0 – ? 00:00:00 cpuhp/0 5 S 0 15 2 0 80 0 – 0 – ? 00:00:00 cpuhp/1 哪个 PID 的优先级更高?
PID 12的优先级更高,因为
ps
显示的优先级默认范围是 -40 到 99,数值越小优先级越高,PID 12的 PRI 为 -40,小于其他 PID 的 PRI 值。