HyperStudy Waiting for Child Processes

This phenomenon happens when the main process launched by HyperStudy is terminated before child processes created by the main process.

HyperStudy expects the process hierarchy to be maintained. Hence, all child processes must finish prior to the main process for the solver job to be complete.

Figure 1. Hierarchy of Processes in HyperStudy


The following warning is shown in the Message Log when HyperStudy is waiting for child processes to finish:
Warning: run (#), model (m_#), Execute (pid = #) process group has not finished completely after 2000 ms. Attempt to wait an additional 600000 ms before killing the remaining processes.
The main process or solver has finished, but it left child processes behind that are still running.
In some cases, this can be fixed by adding an appropriate argument such as /wait or interactive.
There are two recommended ways to diagnose this issue:
  • By increasing the verbose to Level 1, you can find out the precise command which HyperStudy is running to invoke the process. To increase the verbose level in the GUI, right-click in the Message Log, select verbose from the context menu, and increase it to level one (1). Once you has the command which was displayed in the message window attempt to use this exact same command in a command prompt and see what happens.
  • When diagnosing this class of problem, it is invaluable to monitor the subprocesses. On Windows, we strongly recommend downloading the Process Explorer tool from Microsoft.

Example

Figure 2 shows an example case from Process Manager: HyperStudy (hst.exe) invokes SimLab (StartSimLab.exe is the main process) and SimLab calls OptiStruct (optistruct_2021_win64.exe) to solve a numerical analysis. OptiStruct process becomes one of the child processes.

Figure 2.


The issue can be fixed by adding some solver arguments. shows some examples.
Solver Arguments Working Command Line
Abaqus interactive C:\...\abq2021.bat j=v4 cpus=4 interactive
Altair Compose -cfg° start /wait "" "%ALTAIR_HOME%%UNITY_DIR_NAME%%EXEC_SUB_PATH%" -cfg -l en -c Compose -v Compose2019.1 -ef Comp.env %*
Altair EDEM ° edem -i "sim.dem" -c -r 1.500000 -w 0.10000 -g 3.000000 -t 3.0e-5 -p 8 -E 0 -e "sim.dfg"
Altair HyperView ° start /wait /min "%ALTAIR_HOME%\hw\bin\win64\hw.exe" -b -tcl "%STUDY_RUN_PATH%\GetGroupValues.tcl"
Altair Solvers -nobg on Linux $ALTAIR_HOME/hwsolvers/optistruct/bin/linux64/optistruct_2021.2_linux64 foo.fem -nobg
Creo °pro_wait C:\Program Files\PTC\Creo 3.0\M090\Parametric\bin\parametric.exe"

"C:\Program Files\PTC\Creo 3.0\M090\Parametric\bin\proe33m140.psf" %* pro_wait -g:no_graphics Creo_Trail.txt

MATLAB -wait matlab -nosplash -noFigureWindows -wait -r "try; run('${filebasename}'); catch; end; quit"
Moldflow ° °"C:\Program Files\Autodesk\Moldflow Synergy 2016\bin\studymod.exe" base.sdy base_mod.sdy teste.xml
Nastran batch=no <path to Nastran Executable> job1.dat batch=no

The solver script can be modified to make sure that child processes terminate before the main process.