Hi,
I’m having some problems with process termination under CDT that I
hope someone can help with. This might be a candidate for a bugzilla,
but I thought I’d ask here first.
As part of our launch process for a remote hardware target, we need to
download the elf file to the board. This is accomplished by a shell
script which does some processing and then launches an executable to
download to the board. So we have a step in our launch which runs the
download script. If the elf file is large, the download can take some
time, so it would be nice to be able to cancel the process. Here’s a
snippet of code from the launch configuration delegate which should
allow for cancelling:
Process process = exec(runCommandArray,
getEnvironmentProperty(config), currentWorkingDir);
IProcess downloadProcess = DebugPlugin.newProcess(launch, process,
renderProcessLabel(getRunLabel()));
*int* total_work = 0;
*while* (!downloadProcess.isTerminated())
{
*if* (monitor.isCanceled())
{
*if* (downloadProcess.canTerminate())
downloadProcess.terminate();
*return* *false*;
}
*if* (total_work <= 90)
monitor.worked(10);
*try*
{
Thread.sleep(1000);
}
*catch* (InterruptedException e)
{}
}
The runCommandArray consists of the path for sh, then the name of the
script and then the arguments for the script. The exec command ends up
running the following line of code:
ProcessFactory.getFactory().exec(cmdLine, envp, workingDirectory);
When the script is run from the command line, it can be cancelled
successfully and it cleans up its child processes. However, when run
from eclipse, the call to terminate() hangs until the download program
(which was launched by the script) has finished. From debugging, it
looks as though the culprit is the call to:
((SpawnerInputStream)getErrorStream()).close();
in the destroy method of the Spawner.
Sorry for the lengthy description of the problem, but is there some
part of the cancel process that I’m missing, or is there some kind of
problem with the Spawner that means that it doesn’t terminate
processes properly? I’m running on Windows XP and the problem seems to
exist in CDT 1.2.1 and 2.0. If a bugzilla would be more appropriate
than a discussion in this mailing list, feel free to let me know and
I’ll submit the problem there.
Thanks in advance,
*James Langley
*Senior Software Engineer
Altera European Technology Centre
Holmers Farm Way
High Wycombe
Bucks HP12 4XF
United Kingdon
http://www.altera.com <http://www.altera.com>