在后台运行应用程序的优点是什么?

在后台运行应用程序的优点是什么?

我真不知道在后台运行应用程序有什么好处。就像通过命令行
一样。Application &

我们到底为什么要在后台运行应用程序?我什么时候应该决定这样做?

答案1

通常,执行时间过长且不需要用户交互的应用程序会被发送到后台,以便我们可以在终端中继续工作。

在后台运行的作业与在前台运行的作业的处理方式相同,只是它们的 STDOUT、STDIN 和 STDERR 有所不同。

如果您的作业需要很长时间,例如文件压缩或备份,您可以将这些作业发送到后台。

jobs您可以使用命令列出在后台运行的作业。

$ ./job1.sh &
[1] 9747
$ ./job2.sh &
[2] 9749
$ ./job3.sh &
[3] 9751
$ jobs
[1]   Running                 ./job1.sh &
[2]-  Running                 ./job2.sh &
[3]+  Running                 ./job3.sh &

每当作业发送到后台 shell 时,都会在此处显示进程的job id和。pid如果我们希望进程返回前台,我们可以使用fg命令将其恢复。

$ fg 1
./job1.sh

但请注意,当您关闭终端 (shell) 时,SIGHUP 将被发送到从 shell 生成的所有后台进程,导致这些进程死亡。为了防止这种情况,您可以使用disown命令从作业表中删除这些进程,从而防止进程被杀死。

一种最好的方法是使用命令启动后台进程,nohup这样 SIGHUP 信号就不会终止该进程,并且它将在后台安全运行。

huponexit还可以通过设置bash shell 的选项来防止将 SIGHUP 发送到子进程(bg 作业) 。

$ shopt -s huponexit

在最新版本的 Bash 中默认设置此选项,但如果未设置,我们可以添加此选项~/.bashrc以使其成为默认行为。

答案2

如果您执行一个需要 5 分钟才能结束的应用程序,例如复制作业,那么 shell 在程序运行时会被阻塞,整整 5 分钟。然后,复制作业位于所谓的前台进程组中,由登录+指示ps。在那 5 分钟内您可能需要做一些其他工作,但 shell 被阻止了。

另一方面,当您在后台 ( cp source target &) 执行复制作业时,您的作业将在后台执行,而不会阻塞当前 shell。你可以继续做其他事情。fg如果您愿意,可以将进程带回前台。

相关内容