2017-07-24 68 views
3

正如标题所说,我想发送一个运行函数到后台。类似于在bash中发送一个运行函数到背景

function myfunc { 
    some_command | while read line 
    #some_command must be running indefinitely 
    do 
     #if some condition on ${line} satisfies 
     #Do something and go to background 
    done 
} 

这可能吗?

我知道有可能直接调用函数&直接在后台运行它。这很明显。这不是this的重复。

+0

[在从脚本后台执行外壳命令]的可能的复制(HTTPS://计算器.com/questions/3683910 /执行命令在后台从脚本) – Aserre

+1

你为什么要这样做?你可以调用你的函数形式为一个单独的bash脚本,并用&符号来调用它。然后你的功能在后台运行。 – schorsch312

+0

为什么不'而真实;如果...;然后do_something&break; fi' –

回答

3

一个简单的命令在后台创建一个进程并等待其终止,在您的情况下,当持续运行的被调用者异步满足条件时,调用者必须继续。

这可以用杀-STOP进行(呼叫者块自己)和杀-CONT(被叫解锁呼叫者)

function myfunc { 
    some_command | while read line 
    #some_command must be running indefinitely 
    do 
     #if some condition on ${line} satisfies 
     kill -CONT $$ 
    done & kill -STOP $$ 
} 
+0

太棒了!最后,有人了解我。 :D –

+0

仅供参考,'function'关键字使得这些代码不必要地不符合POSIX sh规范 - 如果第一行是'myfunc(){',使用'function'关键字,它可以移植到更广泛的shell中删除并添加'()'语法。 –