• 练习 9:Bash:任务控制,jobsfg
    • 这样做
    • 你会看到什么
    • 解释
    • 附加题

    练习 9:Bash:任务控制,jobsfg

    原文:Exercise 9. Bash: job control, jobs, fg

    译者:飞龙

    协议:CC BY-NC-SA 4.0

    自豪地采用谷歌翻译

    Linux是一个多任务操作系统。这意味着有许多程序同时运行。从用户的角度来看,这意味着你可以同时运行几个程序,而且 bash 肯定有工具,为你控制多个任务的执行。为了能够使用此功能,你需要学习以下命令:

    • <CTRL> + z - 将当前运行的程序放在后台。
    • jobs - 列出所有后台程序。
    • fg - 把程序带到前台。fg接受一个数字作为参数,它可以从jobs中获取数,或者如果无参数调用,则将最后一个挂起的程序带到前台。
    • ctrl + c - 一次性停止执行当前运行的程序。虽然我不会在这个练习中使用它,但我必须说,这可能是非常有用的。

    现在,你将学习如何使用 bash 内置的工具来控制程序的执行。

    这样做

    1. 1: less -S .profile
    2. 2: <CTRL+z>
    3. 3: less -S .bashrc
    4. 4: <CTRL+z>
    5. 5: less -S .bash_history
    6. 6: <CTRL+z>
    7. 7: jobs
    8. 8: fg
    9. 9: q
    10. 10: fg
    11. 11: q
    12. 12: fg
    13. 13: q
    14. 14: fg
    15. 15: jobs

    你会看到什么

    1. user1@vm1:~$ less -S .profile
    2. # exists.
    3. # see /usr/share/doc/bash/examples/startup-files for
    4. # the files are located in the bash-doc package.
    5. # the default umask is set in /etc/profile; for setti
    6. # for ssh logins, install and configure the libpam-um
    7. #umask 022
    8. # if running bash
    9. if [ -n "$BASH_VERSION" ]; then
    10. # include .bashrc if it exists
    11. if [ -f "$HOME/.bashrc" ]; then
    12. . "$HOME/.bashrc"
    13. [1]+ Stopped less -S .profile
    14. user1@vm1:~$ less -S .bashrc
    15. # for examples
    16. # If not running interactively, don't do anything
    17. [ -z "$PS1" ] && return
    18. # don't put duplicate lines in the history. See bash(
    19. # don't overwrite GNU Midnight Commander's setting of
    20. HISTCONTROL=$HISTCONTROL${HISTCONTROL+:}ignoredups
    21. # ... or force ignoredups and ignorespace
    22. HISTCONTROL=ignoreboth
    23. # append to the history file, don't overwrite it
    24. shopt -s histappend
    25. [2]+ Stopped less -S .bashrc
    26. user1@vm1:~$ less -S .bash_history
    27. echo Hello, $LOGNAME!
    28. echo 'echo Hello, $LOGNAME!' >> .profile
    29. cp .profile .profile.bak
    30. tail .profile
    31. ls -altr
    32. history -w
    33. ls -al
    34. cat .profile
    35. echo Hello, $LOGNAME!
    36. echo 'echo Hello, $LOGNAME!' >> .profile
    37. cp .profile .profile.bak
    38. tail .profile
    39. ls -altr
    40. [3]+ Stopped less -S .bash_history
    41. user1@vm1:~$ jobs
    42. [1] Stopped less -S .profile
    43. [2]- Stopped less -S .bashrc
    44. [3]+ Stopped less -S .bash_history
    45. user1@vm1:~$ fg
    46. user1@vm1:~$ fg
    47. user1@vm1:~$ fg
    48. user1@vm1:~$ fg
    49. -bash: fg: current: no such job
    50. user1@vm1:~$ jobs
    51. user1@vm1:~$

    解释

    1. 打开.profile来查看。注意我如何使用-S参数,让less开启-chop-long-lines选项来启动。
    2. 挂起less
    3. 打开.bashrc来查看。
    4. 挂起less
    5. 打开.bash_history来查看。
    6. 挂起less
    7. 打印挂起程序的列表。
    8. 切换到less
    9. 退出它。
    10. 切换到第二个less
    11. 退出它。
    12. 切换到第一个less
    13. 退出它。
    14. 尝试切换到最后一个程序。没有任何程序,但你这样做是为了确保确实没有。
    15. 打印挂起程序的列表。这是为了确保没有后台任务,通过看到jobs打印出空的输出。

    附加题

    打开man bash,搜索 JOB CONTROL,输入/, JOB CONTROL, <ENTER>,并阅读它。