如何从后台进程进行 grep?



我有一个运行应用程序的脚本。 该应用程序产生一些输出 我需要从输出中 grep 以进行验证 我怎样才能做到这一点?

例如;

script1.sh

#!/bin/sh
app1 &
app2
******
Output:
app1 -> "App1"
app2 -> "APp2"

您可以使用nohup来捕获nohup文件中的脚本输出和grep。以下是您将如何在nohup中执行命令:

nohup ./script.sh &

它将在当前目录中创建一个可用于您的目的的nohup.out文件。

我建议在nohup生成的文件上使用命名管道。原因很微妙,但很重要。假设您的后台应用程序需要 10 秒才能执行并生成大量数据。要使nohup正常工作,您需要等待后台应用程序完成,然后才能处理该文件中的数据。您将错过首先使用后台进程的好处,即并行性。这不仅适用于nohup输出,也适用于任何常规文件。

下面是一个不等待后台文件完成执行的示例:

$ { for i in {0..100}; do echo $i; sleep 0.1; done } > outfile &
[1] 2069
$ grep 1 outfile
1

如您所见,grep 进程会立即处理文件并在后台应用程序完成写入数据之前退出。

使用命名管道时,前台进程(在本例中grep(将知道它需要等待管道关闭。请注意差异:

$ mkfifo outpipe
$ { for i in {0..100}; do echo $i; sleep 0.1; done } > outpipe &
[1] 2173
$ grep 1 outpipe
1
10
11
12
13
14
15
16
17
18
19
21
31
41
51
61
71
81
91
100

使用命名管道,我们可以像使用管道一样使用后台进程的输出。

最新更新