Bash run 命令在子壳的后台运行
Bash run command in background inside subshell
我希望能够在子外壳内对进程进行bg,就好像它不在子外壳中一样。
$( sleep 3 & )
只是忽略了与号。
我试过:
$( sleep 3 & )
$( sleep 3 & ) &
$( sleep 3 ) &
但没有任何变化。
然后我尝试了返回$( disown sleep 3 & )
放弃:无法在 Subshell 中操作作业
这导致我尝试$( set -m; disown sleep 3 & )
但我得到了相同的输出。
我甚至尝试创建一个 c++ 程序来守护自己:
#include <unistd.h>
#include <chrono>
#include <thread>
using namespace std;
int main() {
int ret = fork();
if (ret < 0) return ret; // fork error
if (ret > 0) return 0; // parent exits
this_thread::sleep_for(chrono::milliseconds(3000));
return 0;
}
但是在运行它之后,意识到因为我正在fork
而不是separate_from_parent_and_let_parent_die
子壳仍然会等待该过程结束。
要走出我的 MCVE,正在从子外壳调用一个函数,在该函数中,我需要从服务器中提取数据,并且需要在 bg 中运行。我唯一的限制是我无法在子外壳中编辑函数调用。
有没有办法不分叉而是与 c++ 程序中的父进程分离,以便它可以在没有后果的情况下死亡或强制命令与 bash 中的子 shell 分离?
最好是后者。
$(...)
命令替换机制在子外壳的stdout
连接到的管道上等待 EOF。因此,即使您在子外壳中后台设置命令,主外壳仍将等待它完成并关闭其stdout
。为了避免等待这种情况,您需要将其输出重定向到远离管道的位置。
echo "$( cat file1; sleep 3 >/dev/null & cat file2 )"
我希望我说得对。如果我错了,请修复我 - 您希望您的主线程能够在子线程结束之前死亡? 我 f 这是您可以在线程上使用detach
方法的情况。
相关文章:
- 为什么我的线程不在后台运行?
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- Bash run 命令在子壳的后台运行
- 如何在后台运行QProcess?
- 如何在程序后台运行函数(特别是自动保存函数)?QT / C++
- 如何重定向 stderr 并使用 popen() 在后台运行
- 如何使用相同的可执行文件在后台运行 3 个 QProcess
- Dictach std ::线程在后台运行
- 为什么当应用在后台运行时,本机线程的行为会有所不同
- 如何使用C ++在后台运行软件而不显示任何窗口
- 使用提升多线程在后台运行函数
- 在后台运行应用程序并捕获传入和传出消息
- 什么可能导致我的 C++ win32 应用程序在后台运行
- 如何使我的控制台C++程序在后台运行
- 在 C 语言的后台运行进程
- 在 C 语言的后台运行线程
- 如何防止Win32应用程序在主窗口关闭后在后台运行
- 当应用程序在后台运行时,如何弹出QMessageBox
- 在后台运行带有接口的matlab
- 在c++ /C中后台运行周期性循环