Skip to content

Commit

Permalink
#29 统一展示格式;修改了一些几处翻译文本
Browse files Browse the repository at this point in the history
  • Loading branch information
Arondight committed Mar 10, 2016
1 parent 06ba3b6 commit ea96939
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 25 deletions.
3 changes: 2 additions & 1 deletion chapter_06/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
## 进程控制

Slackware 系统经常会运行成百上千个程序,每个程序都由一个进程指示。管理这些进程是系统管理中很重要的一部分。那么我们怎么精确的管理这些独立的进程呢?
Slackware系统经常会运行成百上千个程序,每个程序都被标识为一个“进程”。管理这些进程是系统管理中很重要的一部分。那么我们怎么精确的管理这些独立的进程呢?

14 changes: 7 additions & 7 deletions chapter_06/cron.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
### 计划任务

我们学习了许多不同的方法来查看系统上的进程和信号,但是如果我们想周期性的运行进程呢?幸运的是,Slackware 包含了 crond(8) 这个工具。cron 为每个用户按照计划表运行进程。这对于需要周期性运行但不需要守护进程的进程很有用,比如备份脚本。每个用户都有自己的 cron。数据库,所以非 root 用户也能周期性的运行程序
我们学习了许多不同的方法来查看系统上的进程和信号,但是如果我们想周期性的运行进程呢?幸运的是,Slackware包含了`crond(8)`这个工具。cron为每个用户按照计划表运行进程。这对于需要周期性运行但不需要守护进程的进程很有用,比如备份脚本。每个用户都有自己的cron。数据库,所以非root用户也能周期性的运行程序

为了从 cron 中运行程序,你需要使用 crontab(1)。Man 页面列出了许多方法,但是最常见的方法是传递 [-e] 参数。
这会锁定用户的 cron 数据库(为了防止它被其它进程覆盖),然后打开由 VISUAL 环境变量指定的文本编辑器。在 Slackware 系统上,这通常是 vi 编辑器。你可以在继续阅读之前参照 vi 的那一章。
为了从cron中运行程序,你需要使用`crontab(1)`。man页面列出了许多方法,但是最常见的方法是传递`-e`参数。这会锁定用户的cron数据库(为了防止它被其它进程覆盖),然后打开由`VISUAL`环境变量指定的文本编辑器。在Slackware系统上,这通常是vi编辑器。你可以在继续阅读之前参照vi的那一章。

cron 数据库最初可能看起来有点过时了,但是它们很灵活。每一个非注释行都会被处理,如果所有时间条件都匹配命令就会被执行。
cron数据库最初可能看起来有点过时了,但是它们很灵活。每一个非注释行都会被处理,如果所有时间条件都匹配命令就会被执行。

```
darkstar:~$ crontab -e
# Keep current with slackware
30 02 * * * /usr/local/bin/rsync-slackware64.sh 1>/dev/null 2>&1
```

就像之前提到过的,cron 的语法一开始很难理解,所以让我们独立的看看每一部分。从左到右,分别是分钟,小时,天,月份,工作日和命令。任何 `*` 匹配每一分钟,小时,天等等。所以上面的例子中,命令是 "/usr/local/bin/rsync-slackware64.sh 1>/dev/null 2>&1",而且它每个月里每周的工作日的上午 2:30 运行。
就像之前提到过的,cron的语法一开始很难理解,所以让我们独立的看看每一部分。从左到右分别是*分钟**小时****月份**工作日**命令*。任何`*`匹配每一分钟、小时、天等等。所以上面的例子中,命令是`/usr/local/bin/rsync-slackware64.sh 1>/dev/null 2>&1`,而且它每个月里每周的每一天的*上午2:30*运行。

cron 也会用命令的输出给本地用户发邮件。因此,一些任务会将输出重定向至 `/dev/null`,这是一个忽略所有输入的特殊设备文件。为了让你容易的记住它,你可能希望把下面的注释文本粘贴到 cron 配置的顶端
cron也会用命令的输出给本地用户发邮件。因此,一些任务会将输出重定向至`/dev/null`,这是一个忽略所有输入的特殊设备文件。为了让你容易的记住它,你可能希望把下面的注释文本粘贴到cron配置的顶端

```
# Redirect everything to /dev/null with:
Expand All @@ -24,4 +23,5 @@ cron 也会用命令的输出给本地用户发邮件。因此,一些任务会
# MIN HOUR DAY MONTH WEEKDAY COMMAND
```

默认情况下,Slackware 在 root 的 crontab 里包括了一些配置文件和注释。这些文件通过在 /etc 目录下创建一些指出它们应该怎么运行的文件夹使设置周期性任务更加简单。放在这些目录下的所有脚本都会每小时,每天,每周,或每月运行一次。目录名需要能自解释:/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly 和 /etc/cron.monthly。
默认情况下,Slackware在root的crontab里包括了一些配置文件和注释。这些文件通过在`/etc`目录下创建一些指出它们应该怎么运行的文件夹使设置周期性任务更加简单。放在这些目录下的所有脚本都会每小时、每天、每周、或每月运行一次。目录名需要能自解释:`/etc/cron.hourly``/etc/cron.daily``/etc/cron.weekly``/etc/cron.monthly`

13 changes: 8 additions & 5 deletions chapter_06/kill_and_killall.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
### Kill 和 Killall

管理进程并不仅仅是了解哪些进程在运行,还包括改变它们的行为。最常见的管理程序的方法就是结束它。做这项工作的工具是 kill(1)。尽管名字如此,但它实际上并不终结进程,只是向它们发送信号。最常见的信号是 `SIGTERM`,它告诉进程结束正在进行的工作然后终结。还有一些其它可以发送的信号,最常用的三个是 `SIGTERM``SIGHUP``SIGKILL`
管理进程并不仅仅是了解哪些进程在运行,还包括改变它们的行为。最常见的管理程序的方法就是结束它。做这项工作的工具是`kill(1)`。尽管名字如此,但它实际上并不结束进程,只是向它们发送信号。最常见的信号是`SIGTERM`,它告诉进程结束正在进行的工作然后终结。还有一些其它可以发送的信号,最常用的三个是`SIGTERM``SIGHUP``SIGKILL`

进程收到信号时会做什么呢。大多数程序收到任何信号时会终结(或者企图终结),但是却有一些很重要的不同。对于初学者,`SIGTERM` 信号告诉进程应该终结自己。这给了进程完成重要活动的时间,比如在退出前向磁盘上写信息。相反的,`SIGKILL` 信号告诉进程立刻结束。这在杀死无响应的进程时很有用,这通常被称作银弹。一些进程(通常是守护进程)会捕获 `SIGHUP` 信号并在收到这种信号时重新加载配置文件。
进程收到信号时会做什么呢。大多数程序收到任何信号时会退出(或者试图退出),但有些特殊的信号除外。对于初学者,`SIGTERM`信号告诉进程应该结束自己。这给了进程完成重要活动的时间,比如在退出前向磁盘上写信息。相反的,`SIGKILL`信号告诉进程立刻结束。这在杀死无响应的进程时很有用,这通常被称作“银弹”("silver bullet")。一些进程(通常是守护进程)会捕获`SIGHUP`信号并在收到这种信号时重新加载配置文件。

为了向进程发送信号,我们首先需要知道它的 PID。你可以使用我们说过的 ps 很容易的得到它。为了向正在运行的进程发送不同的信号,你可以使用信号编号和 [-s] 作为参数。[-l] 参数列出了所有你可以选择的信号和它们的编号。你也可以使用 [-s] 和它们的名称来发送信号。
为了向进程发送信号,我们首先需要知道它的PID。你可以使用我们说过的`ps`很容易的得到它。为了向正在运行的进程发送不同的信号,你可以使用信号编号和`-s`作为参数。`-l`参数列出了所有你可以选择的信号和它们的编号。你也可以使用`-s`和它们的名称来发送信号。

> 译者注:PID为进程号
```
darkstar:~$ kill -l
Expand All @@ -18,11 +20,12 @@ darkstar:~$ kill -s 1 1234 # SIGHUP
darkstar:~$ kill -s HUP 1234 # SIGHUP
```

有时你可能希望删除所有拥有某个进程名的进程。你可以使用 killall(1) 杀死这些进程。只需要向 killall 提供与 kill 相同的参数即可。
有时你可能希望结束所有匹配某个进程名的进程。你可以使用`killall(1)`杀死这些进程。只需要向`killall`提供与`kill`相同的参数即可。

```
darkstar:~$ killall bash # SIGTERM
darkstar:~$ killall -s 9 bash # SIGKILL
darkstar:~$ killall -s 1 bash # SIGHUP
darkstar:~$ killall -s 1 bash # SIGHUP
darkstar:~$ killall -s HUP bash # SIGHUP
```

20 changes: 10 additions & 10 deletions chapter_06/ps.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
### ps

管理进程的第一步是找出当前正在运行的进程。最常用最强大的工具是 ps(1)。没有任何参数时,ps 不会告诉你太多信息。默认情况下,它仅仅会告诉你当前激活的终端里正在运行的进程。如果你想要更多信息,我们需要更加深入。
管理进程的第一步是找出当前正在运行的进程。最常用最强大的工具是`ps(1)`。没有任何参数时,`ps`不会告诉你太多信息。默认情况下,它仅仅会告诉你当前激活的终端里正在运行的进程。如果你想要更多信息,我们需要更加深入。

```
darkstar:~$ ps
Expand All @@ -9,9 +9,9 @@ darkstar:~$ ps
12236 pts/4 00:00:00 ps
```

你可以看到当前终端下所有运行的程序,而且只包括一部分信息。PID 是进程 ID;每一个进程都有一个唯一的数字。TTY 告诉你进程所连接的终端。CMD 是运行的命令你可能会对 TIME 有点困惑,因为它看起来变得太慢。这并不是进程已经运行的时间,而是进程消耗的 CPU 时间。虚进程不使用 CPU 时间,所以这个值不会增长得太快。
你可以看到当前终端下所有运行的程序,而且只包括一部分信息。`PID`是进程ID;每一个进程都被标识了一个唯一的数字。`TTY`告诉你进程所连接的终端。`CMD`是运行的命令。你可能会对`TIME`有点困惑,因为它看起来变得太慢。这并不是进程已经运行的时间,而是进程消耗的**CPU时间**。事实上空闲进程不使用CPU时间,所以这个值不会增长得太快。

只看我们自己的进程没什么意思,所以让我们用 `[-e]` 参数查看系统上所有的进程。
只看我们自己的进程没什么意思,所以让我们用`-e`参数查看系统上所有的进程。

```
darkstar:~$ ps -e
Expand All @@ -29,16 +29,16 @@ darkstar:~$ ps -e
... many more lines omitted ...
```

上面的例子使用了标准的 ps 语法,但是如果使用 BSD 语法会发现更多信息。我们可以使用 `[aux]` 参数达成目的。
上面的例子使用了标准的ps语法,但是如果使用BSD语法会发现更多信息。我们可以使用`aux`参数达成目的。

#### 注意

> 这与 `[-aux]` 参数是不同的,但是大多数情况下两者是等价的。这是很老的遗留问题。更多信息可以参考 ps 的 Man 页面
> #### 注意
>
> 这与`-aux`参数是不同的,但是大多数情况下两者是等价的。这是很老的遗留问题。更多信息可以参考`ps`的man页面
```
darkstar:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 3928 632 ? Ss Apr05 0:00 init [3]
root 1 0.0 0.0 3928 632 ? Ss Apr05 0:00 init [3]
root 2 0.0 0.0 0 0 ? S Apr05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Apr05 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S Apr05 0:00 [ksoftirqd/0]
Expand All @@ -48,9 +48,9 @@ root 11 0.0 0.0 0 0 ? S Apr05 0:00 [khelper]
... many more lines omitted ....
```

可以看到,BSD 语法提供了更多的信息,包括哪个用户在控制进程以及当运行 ps 时进程的 RAM 和 CPU 占用率
可以看到,BSD语法提供了更多的信息,包括哪个用户在控制进程以及当运行ps时进程的内存和CPU占用率

为了完成这些,ps 允许在进程的基础上提供一个或多个进程 PID 作为参数,且使用 `-o` 标志显示这些进程的特定属性
为了完成这些,`ps`允许在进程的基础上提供一个或多个进程PID作为参数,且使用`-o`参数显示这些进程的特定属性

```
darkstar:~$ ps -o cmd -o etime $$
Expand Down
4 changes: 2 additions & 2 deletions chapter_06/top.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
### top

到目前为止,我们学习了如何查看当前活跃的进程,但是假如我们想监视系统一段时间呢? top 按照一定顺序显示你的系统上的进程,包括它们的相关信息。默认情况下,进程按照他们的 CPU 占用率排序且每 3 秒更新一次
到目前为止,我们学习了如何查看当前活跃的进程,但是假如我们想监视系统一段时间呢?`top`按照一定顺序显示你的系统上的进程,包括它们的相关信息。默认情况下,进程按照他们的CPU占用率排序且每3秒更新一次

```
darkstar:~$ top
Expand Down Expand Up @@ -30,4 +30,4 @@ Swap: 0k total, 0k used, 0k free, 2082652k cached
243 root 15 -5 0 0 0 S 0 0.0 0:02.65 kswapd0
```

Man 页面包含了如何与 top 进行交互的详细帮助,比如改变延迟时间,进程显示的顺序,甚至是如何在 top 里立刻结束进程。
man页面包含了如何与`top`进行交互的详细帮助,比如改变延迟时间,进程显示的顺序,甚至是如何在`top`里立刻结束进程。

1 comment on commit ea96939

@zhustec
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我还是觉得英文两端还是加空格的好,看过许多翻译的项目都是这么做的。

Please sign in to comment.