【发布时间】:2013-10-14 01:46:48
【问题描述】:
首先,我是编程等方面的初学者,因此对我的问题中缺乏专业准确的术语表示歉意,但希望我能设法表达我的观点!
您对如何在 bash 或 tcsh 中运行一个长后台进程有什么建议吗? .?
我已经编写了一个 shell 脚本(用于 bash)来为一个短而重的视频剪辑的每一帧应用一个图像过滤器(它实际上是一个科学断层图,但这并不重要)。它应该:
使用 em2em 软件创建带有脚本的文件,以将整个文件转换为不同的格式。
-
将转换后的文件分成三个相等的部分,并使用程序蜘蛛在我的 linux 服务器上的不同内核上的单独进程中过滤每组帧(以加快处理速度)。首先,创建三个具有所需过滤参数的批处理模式文件(filter_1/2/3.spi),然后启动三个子流程:
spider spi/spd @filter_1 & # The first process to be launched by the main script and run in the background on one core spider spi/spd @filter_2 & # The second background process run on the next core spider spi/spd @filter_3 # The third process to be run in parallel with the two above and be finished before proceeding further.然后将这些过滤后的片段放在一起。
因为我希望 3 个过滤步骤同时运行,所以我用一个简单的 & 将前两个步骤发送到后台,并将最后一个保留在前台,以便主脚本进程将等待所有三个步骤完成(应该发生同时)在进一步重新组装 3 个块之前。当我在前台运行我的脚本时,这一切都很好,但是它会将许多子进程的大量输出信息抛出到终端上。我可以通过以下方式减少它:
$ ./My_script 2>&1 > /dev/null
但是每个蜘蛛进程仍然返回
*****Spider normal stop*****
到终端。当我尝试将主进程发送到后台时,它一直在停止。
您对我如何在后台运行主脚本并仍然让它以某种方式并行运行 3 个蜘蛛子进程有什么建议吗?
谢谢!
【问题讨论】:
-
而不是
./My_script 2>&1 > /dev/null,它将 stdout 定向到 /dev/null 并将 stderr 定向到原始 stdout(您在其中键入命令的 tty),尝试使用 @987654325 将两者都重定向到 /dev/null @。订单很重要。
标签: linux bash process background spawn