如何让进程在Linux后台运行
在Linux操作系统中,我们经常需要将进程置于后台运行,以便进行其他操作而不被打断。这通常通过在命令后添加"&"来实现,实际上是将命令放入了一个作业队列中。具体操作如下:
```bash
$ ./test.sh &
```
执行上述命令后,你会看到类似这样的输出:
```bash
[1] 17208
```
这意味着你的进程已在后台运行,其进程ID为17208。你可以使用`jobs -l`命令来查看后台作业的状态。
对于已经在前台运行的进程,你也可以将其转移到后台。按`Ctrl + Z`暂停正在运行的进程,然后使用`bg`命令将其放到后台运行:
```bash
$ ./test.sh
[1] Stopped ./test.sh
$ bg %1
[1] ./test.sh &
```
这些后台运行的进程有一个问题:它们的父进程是当前的终端shell进程。一旦父进程退出,这些子进程会收到一个hangup信号并随之退出。为了避免这种情况,你可以使用`nohup`命令忽略hangup信号,或者通过`setsid`将父进程设置为init进程(进程号为1)。例如:
```bash
$ nohup ./test.sh &
$ setsid ./test.sh &
```
这两种方法都能使你的进程在shell退出后继续运行。你也可以使用`ps -ef | grep test`来查看正在运行的进程。
对于那些已经在后台运行的进程,你可以使用`disown`命令来断绝与当前shell的联系:
```bash
$ disown -h %1
```
另一种方法是将进程在一个subshell中执行,这实际上与`setsid`有异曲同工之妙。只需将命令用括号()括起来然后运行即可:
```bash
$ (./test.sh &)
```
需要注意的是,以上方法在不同的操作系统和shell中可能会有所不同。例如,在AIX的ksh中,没有`disown`命令,但可以使用`nohup -p PID`来达到类似的效果。还有更强大的工具如`screen`,它可以创建一个虚拟终端,在其中执行的命令可以达到类似于nohup的效果,这在有多个命令需要在后台连续执行时非常便利。具体操作如下:
```bash
$ screen -dmS screen_test 创建虚拟终端并命名为screen_test但不立即显示它。
$ screen -list 显示所有虚拟终端列表。
$ screen -r screen_test 重新连接至名为screen_test的虚拟终端。
```在这个虚拟终端中执行的任何命令都会持续运行,即使你退出了物理终端或者关闭了会话。这种方式的灵活性非常高,尤其适用于需要在后台连续执行多个命令的场景。
网站设计
- 如何让进程在Linux后台运行
- 笔记本连接无线网络的详细步骤(图文教程)
- 完全掌握纯CSS布局网页
- ThinkPad X1 Yoga 2017值不值得买?ThinkPad X1 Yoga变形本
- 笔记本主板维修工程师给你的忠告
- CSS注释的一些高级用法
- 天猫精灵X1和天猫精灵方糖哪款更好?天猫精灵
- 怎样设置无线路由器密码才能不被破解的技巧分
- 站长必备 网站备案不用关闭网站的9种方法
- DNS协议欺骗攻击技术的攻防知识 DNS欺骗攻击和防
- 3Dmax中怎么设置VR渲染最终效果-
- Flash cs6怎么制作点击目录按钮切换场景的效果-
- 百度眼中的好站与我们眼中的好站
- CSS3实用方法总结(推荐)
- 惠普星系列x360值不值得买?惠普星系列x360超轻薄
- 简单介绍几款Docker的检测工具