这里首先先介绍一下 ctrl+z bg fg jobs 命令

下面为了观察效果,test1.sh脚本不停的输出hello

ctrl + z ,会使一个正在运行的进程挂起(暂停)到后台,而且执行jobs可以查看到后台运行的程序和运行状态,注意任务号不是进程号,

要想查这个任务号对应的进程号用 ps 命令查看

如果要把已经挂起的任务放到后台运行,执行bg + 任务号,缺省表示最近一次挂起的任务,任务号后面有 + 号的

如果要把已经挂起的任务放到前台运行,执行 fg + 任务号,缺省表示最近一次挂起的任务

或者一个在后台运行的任务放回前台运行 ,也用此 fg 命令

如果对fg bg 缺省值看不懂的可以看下图, world.sh脚本是后挂起的,任务号是2 ,注意[2]后面有+号,表示最近一次挂起的

这时我们用 fg 放到前台运行,而且没有给任务号作为参数,默认被放到前台的进程是world.sh

如果要结束进程可以两种方法(此处)

1 运行jobs ,查看任务号num ,然后 kill %num

2 先用ps 命令找到进程号PID,然后kill 

 下面再来讲下nohup  和 & 

让一个脚本或命令直接在后台运行,可以用&

[captain@Caphost shell]$ ./hello.sh &
[1] 16058

但是当终端关闭时,这个进程依然会被结束,如果我们想要进程不收终端的影响,即使关闭了终端,进程仍然可以运行,那么就要用到nohup命令

1.用nohup命令,将hello.sh放到后台,关闭标准输入,终端不再能够接受任何输入(这里指的是标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件即使关闭终端,程序依然运行 。但是ctrl+c会中止运行

 

[captain@Caphost shell]$ nohup ./hello.sh 
nohup: ignoring input and appending output to ‘nohup.out

2. nohup ./hello.sh & ,将hello.sh任务放到后台,而且可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件

即使关闭终端,程序依然运行 

[captain@Caphost shell]$ nohup ./hello.sh &
[1] 16539
[captain@Caphost shell]$ nohup: ignoring input and appending output to ‘nohup.out’
ls
abc    hello.log  test10bak2   test11.c   test3.c  test6-2.c   test7bak.c  test9.c    world.sh
a.c    hello.sh   test10.c     test1.log  test4.c  test6bak.c  test7.c     test.c
a.out  nohup.out  test10.cbak  test2.c    test5.c  test6.c     test8.c     world.log
[captain@Caphost shell]$ 

 

参考 https://www.cnblogs.com/jinxiao-pu/p/9131057.html

  https://www.cnblogs.com/kaituorensheng/p/3980334.html

posted on 2018-12-07 16:40  队长china  阅读(519)  评论(0编辑  收藏  举报