如何让进程在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的虚拟终端。
```在这个虚拟终端中执行的任何命令都会持续运行,即使你退出了物理终端或者关闭了会话。这种方式的灵活性非常高,尤其适用于需要在后台连续执行多个命令的场景。
网站设计
- 笔记本电脑开不机的原因 笔记本电脑开不了机
- Surface Studio一体机怎么样?微软Surface Studio详细拆
- 彻底消灭Flash动画中的乱码
- ai中怎么绘制立体的3d物体模型-
- 本文的主角 vertical-align使用介绍
- css3 border-radius属性详解
- ideapad S10-3如何更改触屏右键菜单时间-
- 普及水冷系统知识之冷液、走管篇
- 5英寸屏荣耀4A真机亮相 或售599元
- 商城类网站应该怎么优化?商城类网站的五大网
- iPhone 6S信息大公开 智能手机发展趋势解读
- 天敏T2和华为盒子哪个好- 对比评测
- 3dmax怎么利用球体制作一个简单的玩具-
- 盘点2014年化妆品行业微商的十种模式模式
- 介绍初级黑客常用兵器(图)
- ai怎么绘制单翼飞机模型- ai飞机矢量图的画法