1 / 26

第 6 章 进程管理

第 6 章 进程管理. 单元目标. ◆ 定义一个进程 ◆ 描述父进程与子进程之间的关系 ◆ 创建和调用shell脚本 ◆ 描述进程监视 ◆ 调用后台进程 ◆ 终止进程 ◆ 列出有用的信号 ◆ 使用nohup命令 ◆ 在ksh下控制jobs. 进程. 进程环境. ◆ 每个程序都会在一个进程中运行: ◆ 变量 $$ 显示了当前shell的进程ID : ◆ ps 命令显示正在运行的进程 : $ echo $$ 4712 $ ps -u team01. Program User and group ID

altessa
Download Presentation

第 6 章 进程管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 进程管理

  2. 单元目标 ◆ 定义一个进程 ◆ 描述父进程与子进程之间的关系 ◆ 创建和调用shell脚本 ◆ 描述进程监视 ◆ 调用后台进程 ◆ 终止进程 ◆ 列出有用的信号 ◆ 使用nohup命令 ◆ 在ksh下控制jobs

  3. 进程 进程环境 ◆ 每个程序都会在一个进程中运行: ◆ 变量 $$ 显示了当前shell的进程ID: ◆ ps 命令显示正在运行的进程: $ echo $$ 4712 $ ps -u team01 ProgramUser and group ID DataProcess ID (PID) Open filesParent Process ID (PPID) Current directoryProgram variables

  4. 登陆进程环境 AIX 系统 login: PID=202 -ksh login: john John's Password: xxxxxx $ _ 环境 program /usr/bin/ksh uid john gid staff files /dev/tty1 PID 202

  5. 进程环境 AIX系统 PID=202 -ksh $ cat kfile PID=310 cat 进程执行期间的环境 • program /usr/bin/cat • uid john • gid staff • files /dev/tty1 • kfile • parent -ksh • PID 310 • PPID 202

  6. 父进程与子进程 $ echo $$ 202 $ ksh $ echo $$ 206 $ date Tue Jan 4 11:18:26 GMT 2000 $ <ctrl-d> $ echo $$ 202 • PID PPID • -ksh 202 1 • ksh 206 202 • date 208 206

  7. 变量与进程 ◆ 变量是进程环境的一部分. ◆ 进程不能访问或改变另一个进程的变量. $ x=4 $ ksh $ echo $x $ x=1 $ <ctrl-d> $ echo $x 4

  8. 导出变量 变量 Subshell Shell export variable=value

  9. shell脚本 shell脚本是存储在一个文本文件里命令的集合 • $ vi hello • echo "Hello, John. Today is: $(date)" • pwd • ls • ~ • ~ • ~ • :wq • $

  10. Shell调用 1 $ cat hello echo "Hello, John. Today is: $(date)" (1) pwd (2) ls (3) $ kshhello Hello, John: Today is: Wed Sep 13 19:34 (1) /home/john (2) books letter1 text2sarah (3) $ _ 子shell $ kshhello -ksh ksh 脚本命令

  11. Shell调用 2 $ cat hello echo "Hello, John. Today is: $(date)" (1) pwd (2) ls (3) $ chmod +x hello $ hello Hello, John: Today is: Wed Sep 13 19:34 (1) /home/john (2) books letter1 text2sarah (3) $ _ 子shell Shell用PATH变量来寻找可执行的文件.

  12. Shell调用 3 $ cat set_dir dir1=/tmp dir2=/usr $ . set_dir $ echo $dir1 /tmp $ echo $dir2 /usr 如果set_dir被调用时没有“.”,dir1和dir2的值是什么?

  13. 命令执行结束的退出值 ◆ 命令执行结束时传给父进程一个退出值: 0 = 成功执行 1 - 255 = 非成功执行 ◆ 环境变量 $?内存储着最后一个执行命令的退出值: $cd /etc/security ksh: /etc/security: Permission denied $ echo $? 1

  14. 监视进程 ps:显示了进程的状态信息 $ ps -f UID PID PPID ... TTY ... COMMAND john 202 1 ... tty0 ... -ksh john 206 202 ... tty0 ... ksh john 210 206 ... tty0 ... ls -R / john 212 206 ... tty0 ... ps -f

  15. 控制进程 $ ls -R / > bigfile $ 前台进程: 后台进程: ksh (wait) ls -R $ ls -R / > bigfile & $ ksh ls -R

  16. 终止进程 (1 of 2) ◆ 前台进程: <Ctrl-c>取消一个前台进程 kill有时kill命令用来终止一个前 台进程 ◆ 后台进程: killkill是唯一终止后台进程 的方法

  17. 终止进程 (2 of 2) kill命令发送一个信号给进程来终止它 $ ps -f UID PID PPID ... TTY ... COMMAND john 202 1 ... tty0 ... -ksh john 204 202 ... tty0 ... db2_start john 206 202 ... tty0 ... find / $ kill 204 $ kill -9 206

  18. 信号 信号 1 2 9 15 意义 挂起----当程序还在运行时用户logout 中断----用户按了中断组合键<Ctrl+c> Kill 信号: 能发送的最强的、也是比较冒险的信该信号不能被阻止或被忽略 终止信号 (默认): 结束进程信号可以被程序处理

  19. 耗时长的进程 ◆ 当用户在一个进程尚未完成之前log off时,nohup命令可以阻止进程被kill $ nohup ls -R / > out 2> err.file & [1] 59 $ ◆ 如果你不重定向输出,nohup将会把输出重定向到文件nohup.out中: $ nohup ls -R / & [1] 61 Sending output to nohup.out $

  20. ksh环境下job控制 命令 jobs <Ctrl-z> fg %<jobnumber> bg %jobnumber 作用 列出所有运行在后台的和被停止的进程 暂停前台任务 前台执行job 后台执行job

  21. Job控制实例 $ ls -R / > out 2> errfile & [1] 273 $ jobs [1] + Running ls -R / > out 2> errfile & $ $ fg %1 ls -R / > out 2> errfile <ctrl-z> [1] + Stopped (SIGTSTP) ls -R / > out 2> errfile & $ $ bg %1 $ jobs [1] + Running ls -R / > out 2> errfile & $ $ kill %1 [1] + Terminate ls -R / > out 2> errfile & $

  22. 守护进程 守护进程daemon是一个永远不会结束的进程,它控制着系统资源,如打印队列。 队列 file 1 file 2 . . qdaemon 打印机

  23. 课堂练习 • 什么时候用“ . ”符号执行一个脚本?为什么? • 什么命令被用来将一个变量导出到子shell? • 下面几步之后x的最后值是多少? $ ( ... login shell ... ) $ ksh $ x=50 $ export x $ <ctrl -d> $ (现在x的值是多少?)

  24. 课堂练习 4.ps命令的那个选项可以娴熟用户正在运行的详细命令 ? 5.True or false? 作为一个普通用户,你只能kill自己的进程而不能kill他人的进程 6.哪个信号是可以传给进程来终止它的最强信号? 7.用户总是用nohup命令在后台运行那些运行时间比较长的进程。为什么 8.在UNIX环境中那些特殊的永不结束的的系统进程的名字是什么?

  25. 课堂练习答案 • 什么时候用“ . ”符号执行一个脚本?为什么? 当你在当前shell下用脚本改变变量值时使用“.” 2. 什么命令被用来将一个变量导出到子shell? export variable_name 3. 下面几步之后x的最后值是多少? $ ( ... login shell ... ) $ ksh $ x=50 $ export x $ <ctrl -d> $ x依然会取得它在开始子shell前的值。如果login shell没有设置x变量,当子进程结束返回父进程时,x依然没有被设置,还是空值。

  26. 课堂练习答案 4. ps命令哪个选项可以显示用户正在运行的命令? ps -f 5.True or false? 作为一个普通用户,你只能kill自己的进程而不能kill他人的进程。 True 6.哪个信号是可以传给进程来终止它的最强信号? signal 9 7.用户总是用nohup命令在后台运行那些运行时间比较长的进程。 在这种情况下job锁住用户的终端并且当用户退出系统时进程继续运行 8.在UNIX环境中那些特殊的永不结束的的系统进程的名字是什么? Daemons

More Related