>
>
>>
>>
>>> Also I read [j] that a problem with popen is that you do not get pid
>>> of child so you cannot wait on command to complete.  Could posix_spawn
>>> be preferrable to popen?
>>>
>>>
>> Exactly. There is no standard way to get child pid from popen() so you
>> can't do polling in image side to wait it's completion.
>> So yeah, posix_spawn() does fix this issue as well as many many other.
>>
>
>
> Looks nice and at the same time, popen support is useful/wanted.
>

Yes, but I wonder if it would still make sense if I finish the posix_spawn
flavor. Anyway, we can decide later since the Popen wrapper is almost
written (a very very first prototype)


> A generic way to deal with pids (in Linux at least, is to have the process
> write its pid in /var/run/ or a subdir of it.
>

That's right, but that only works for a certain number of cases, and
polling with checking files does not seem good.
I think that you if you expect to run a a command that takes some time,
then use the posix_spawn wrapper and use popen only in "blocking" mode.


>
> That's how monit checks for processes for example.
>
> http://unix.stackexchange.com/questions/12815/what-are-pid-and-lock-files-for
>
> We need as many options as we can here.
>

I not fully convinced with that statement.


> Mariano, I added you to a Trello board that captured a couple of items
> about the topic you deal with.
> https://trello.com/b/Hji4F0Zp/clipharo
>
>
Thanks!


> We also have a card that says the following:
>
> Pharo follows Smalltalk which uses a global object named Smalltalk which
> in fact is an instance of SmalltalkImage, confusing if you ask me.
>
> I would add a simple class named System which have class-side accessors
> for static global things like
>

My answers below. Just as a matter of how that System class could be
written:


>
>    - image => links to the old Smalltalk
>
>
Well..we have now "Smalltalk image"


>    - stdin
>    - stdout
>    - session
>
>
OK about those.


>
>    - environment for ENV vars
>
>
we have "Smalltalk os environment"


>
>    - workingDirectory accessing the process working directory $PWD
>
>
We have "FileSystem workingDirectory"


>
>    - 'pid'
>
>
Well, we need OSProcess right now, but it is also very very easy to do via
FFI.



> That's a very easy thing to do, but IMO it will help anybody coming from
> outside smalltalk to easily find these things. Probably there are more
> things that would fit here.
>
> I'd like to have that.
>
> The discussion involved Camillo who was very into these topics. His
> Pinocchio work seemed to have contributions that can be useful of the CLI
> support for Pharo.
>
> Phil
>
>
>>
>>
>>> and just btw, mildly interesting is using sockets rather than pipes
>>> for interprocess communication [l]
>>>
>>> [j]
>>> http://stackoverflow.com/questions/3884103/can-popen-make-bidirectional-pipes-like-pipe-fork
>>> [k] http://stackoverflow.com/questions/6743771/popen-alternative
>>> [l]
>>> http://stackoverflow.com/questions/25161377/open-a-cmd-program-with-full-functionality-i-o/25177958#25177958
>>>
>>>
>> Thanks. I will check that on a second step ;)
>>
>>
>>> >
>>> > 2) We believe that there is a large number of OSProcess users that use
>>> > OSProcess only for executing OS commands AND popen() approach would be
>>> more
>>> > than enough (we will do a survey about this). So, a very simply
>>> solution via
>>> > FFI for these users rather than having all OSProcess, Command Shell,
>>> the
>>> > plugins etc, may be worth.
>>> >
>>> > What do you think?
>>> >
>>> >>
>>> >> Now, given some of the difficulties seen when dealing with external
>>> >> processes, I'd be wary of the "async" side of things. Random failures
>>> >> seemingly linked to signal loss are certainly not something I'd like
>>> to
>>> >> debug.
>>> >>
>>> >
>>> > Indeed, it won't be easy I guess. But sometimes the process you
>>> execute may
>>> > take quite some time and blocking the VM for that period is not a good
>>> > choice. So... what would you prefer to solve that? Do you prefer
>>> image-based
>>> > pooling as OSProcess does when IOPlugin is not used?
>>>
>>>
>>> How much might your work overlap with the Threaded FFI project for
>>> Cog?...
>>> ..."The Cog VM is single-threaded, providing green threads to the
>>> Smalltalk level, as do most Smalltalk VMs. There is a prototype
>>> subclass of the CoInterpreter, CoInterpreterMT, which provides a
>>> Python-like multi-threaded VM where any number of threads can share
>>> the VM with only one running the VM at any one time.  This uses an
>>> extremely simple low-level scheme for releasing and re-acquiring
>>> ownership of the VM designed by David Simmons.  This results in any
>>> and all FFI calls being non-blocking since there is such a low
>>> overhead to making a non-blocking FFI call that all FFI calls can be
>>> non-blocking.  Eliot has worked on this, implementing the prototype
>>> and the reentrant FFI plugin it requires.  But this needs to be
>>> revived.  It would be a really powerful enhancement."
>>>
>>>
>> Well, Eliot said I may need to give a hand to them in order to finish the
>> Threaded FFI. However, I am still not 100% certain if the threaded FFI
>> calls to read from pipes would be worth. Eliot said that yes. Anyway, once
>> I have the first version working I will digest this and goes to the next
>> level and see how I can make things better than polling, if polling proves
>> to be a problem.
>>
>>
>>
>>> cheers -ben
>>>
>>> P.S. Just another article warning against mixing fork and
>>> multiple-threads (which it seems posix_spawn may avoid)...
>>>
>>> http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
>>>
>>>
>> Thanks for the reference.
>>
>> Cheers,
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>>
>
>


-- 
Mariano
http://marianopeck.wordpress.com

Reply via email to