下列命令可以用来操纵进程任务:
ps 列出系统中正在运行的进程;
kill 发送信号给一个或多个进程 (经常用来杀死一个进程);
jobs 列出当前 shell 环境中已启动的任务状态, 若未指定 jobsid, 则显示所有活动的任务状态信息; 如果报告了一个任务的终止 (即任务的状态被标记为 Terminated),shell 从当前的 shell 环境已知的列表中删除任务的进程标识;
bg 将进程搬到后台运行 (Background);
fg 将进程搬到前台运行 (Foreground);
将 job 转移到后台运行
如果你经常在 X 图形下工作, 你可能有这样的经历: 通过终端命令运行一个 GUI 程序, GUI 界面出来了, 但是你的终端还停留在原地, 你不能在 shell 中继续执行其他命令了, 除非将 GUI 程序关掉.
为了使程序执行后终端还能继续接受命令, 你可以将进程移到后台运行, 使用如下命令运行程序: #假设要运行 xmms
$xmms &
这样打开 xmms 后, 终端的提示又回来了. 现在 xmms 在后台运行着呢; 但万一你运行程序时忘记使用 "&" 了, 又不想重新执行; 你可以先使用 ctrl+z 挂起程序, 然后敲入 bg 命令, 这样程序就在后台继续运行了.
概念: 当前任务
如果后台的任务号有 2 个,[1],[2]; 如果当第一个后台任务顺利执行完毕, 第二个后台任务还在执行中时, 当前任务便会自动变成后台任务号码 "[2]" 的后台任务. 所以可以得出一点, 即当前任务是会变动的. 当用户输入 "fg","bg" 和 "stop" 等命令时, 如果不加任何引号, 则所变动的均是当前任务.
察看 jobs
使用 jobs 或 ps 命令可以察看正在执行的 jobs.
jobs 命令执行的结果,+ 表示是一个当前的作业, 减号表是是一个当前作业之后的一个作业, jobs -l 选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated, 但是如果任务被终止了 (kill),shell 从当前的 shell 环境已知的列表中删除任务的进程标识; 也就是说, jobs 命令显示的是当前 shell 环境中所起的后台正在运行或者被挂起的任务信息;
进程的挂起
后台进程的挂起:
在 solaris 中通过 stop 命令执行, 通过 jobs 命令查看 job 号 (假设为 num), 然后执行 stop %num;
在 RedHat 中, 不存在 stop 命令, 可通过执行命令 kill -stop PID, 将进程挂起;
当要重新执行当前被挂起的任务时, 通过 bg %num 即可将挂起的 job 的状态由 stopped 改为 running, 仍在后台执行; 当需要改为在前台执行时, 执行命令 fg %num 即可;
前台进程的挂起:
ctrl+Z;
进程的终止
后台进程的终止:
方法一:
通过 jobs 命令查看 job 号 (假设为 num), 然后执行 kill %num
方法二:
通过 ps 命令查看 job 的进程号 (PID, 假设为 pid), 然后执行 kill pid
前台进程的终止:
ctrl+c
kill 的其他作用
kill 除了可以终止进程, 还能给进程发送其它信号, 使用 kill -l 可以察看 kill 支持的信号.
SIGTERM 是不带参数时 kill 发送的信号, 意思是要进程终止运行, 但执行与否还得看进程是否支持. 如果进程还没有终止, 可以使用 kill -SIGKILL pid, 这是由内核来终止进程, 进程不能监听这个信号.
来源: http://www.bubuko.com/infodetail-2957961.html