[fpc-pascal] Re: Linux: How to execute a program, but not to wait until finishes

Lukasz Sokol el.es.cr at gmail.com
Tue Jul 5 09:44:02 CEST 2011


On 04/07/2011 18:05, Marco van de Voort wrote:
> In our previous episode, Lukasz Sokol said:
>> 
>> ExecuteProcess('/bin/bash -c /my/path/to/exe &'); //
>> (probably...?)

> 
> First, the binary name is always separate, there are minimal two
> parameters.

You've snipped a ' :)' that was in the next line :) 

> 
> Moverover I would use the separate syntax, or use "" to signal that
> the /commandline my...  & belongs together.
> 
> So either (the better solution)
> 
> executeprocess('/bin/bash',['-c','/my/path/to/exe &']);
> 
> or the old syntax:
> 
> executeprocess('/bin/bash,' -c "/my/path/to/exe &"');
> 
> or using more unixy routines:
> 
> fpsystem('/my/path/to/exe &');
> 
> the old syntax has as disadvantage that in more complex cases gets
> problems with nested quoting. The last syntax uses the default system
> shell, which might not be bash (and bash might not be in /bin
> everywhere, when installed)

A day without learning something new, is a day lost ;)

> 
> A 4th way is using TProcess, which in trunk now also has
> possibilities to specify arguments individually to avoid certain
> quoting problems.

I like this one.

> 
>> I think you need to use fork
>> http://www.freepascal.org/docs-html/rtl/oldlinux/fork.html and then
>> one of the exec* procedures
>> http://www.freepascal.org/docs-html/rtl/index-8.html#SECTIONE 
>> (search for exec on this page, there is 6 of them related to linux 
>> - Execl, Execle,Execlp,Execv,Execve,Execvp - that _do_not_return_
>> when called! that's why you need to use Fork())
> 
> That's what executeprocess and the other ways do for you.
> 
OK.

:)

L.





More information about the fpc-pascal mailing list