Shell 基本命令 1

给朋友写的 Shell 入门心得

Shell 命令应该从资源管理的角度去学

常用的命令其实是有两部分的:

  1. shell 语法中的命令
  2. 系统命令

关于第一条,应该看一下 shell(主要指 bash) 语言本身的关键词,其中有一个重点的概念要说一下:jobs

  1. jobs 指的是当前终端中后台运行的任务
  2. 具体来说,就是运行的时候用了 & 让他后台运行
  3. 退出的时候,jobs 中的进程会被停止
  4. 使用 Ctrl-z,fg,bg,kill 切换进程状态
  5. 使用 nohup 启动不会随着终端退出的进程
  6. 使用 disown 处理已经在运行的进程,让他不随终端退出而退出

运行一个持续的命令,比如 ping baidu.com,会一直运行,这时候按 Ctrl-Z,此进程会被挂起

$ jobs
[1]+  Stopped                 ping baidu.com

这个时候啊,进程并没有杀掉,用 kill 来杀。可以看到进程前面那个数字是 1,用 %1 来代替这个进程

kill %1

当然,杀死的信号分 1-9 级,9 是不多 BB,直接杀,谨慎使用

kill -9 %1

运行下会出现类似提示

[1]+  Terminated                 ping baidu.com

注意 按了 Ctrl-Z 之后,进程并未在后台运行,而是被挂起了,状态是Stopped
要是想让他在当前终端的后台运行的话,应该用 bg 命令

$ bg %1
$ jobs
[1]+  Running                 ping baidu.com &

可以看到一堆输出到屏幕上的信息,这表明进程是在运行的。
以上的三步操作ping baidu.com -> Ctrl-Z -> bg %1
其实等效于运行 ping baidu.com &
这里的进程虽然是后台,但还是指终端的后台,会随着终端退出而退出
好吧,有时候,也想再把它调到前台
fg %1
对挂起的进程也有效

当前终端退出的时候, jobs 里面能看到的所有进程都会退出
这很多时候不满足我们的预期
推荐一篇文章,更详细的描述了各种解决方案
这里简单说下 nohup

个人平时用 nohup 比较多
比如刚才的 ping,用 nohup 运行就是

nohup ping baidu.com &

查看下后台运行的进程

$ ps -efw | grep ping | grep baidu.com
root     32368 32346  0 21:58 pts/1    00:00:00 ping baidu.com

这句话的意思是看所有进程里面包含ping关键词和baidu.com关键词的进程
现在 exit 后,再进入终端,发现这个进程还是存在的
有几点要注意:

  1. 进程启动的时候要加 &
  2. nohup 启动的进程和名字一样,实际上是让进程忽略了 HUP 信号,也就是终端退出时会发送向进程的信号
  3. 默认的输出文件是 nohup.out,可以自己更改,并把错误流也重定向到相应文件,写法如nohup ping baidu.com >/tmp/ping.log 2>&1 &,其中>/tmp/ping.log是指输出重定向到文件/tmp/ping.log2>&1是指错误流(2)合并到输出流(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值