off topic: combined output of concurrent processes

Amadeus W.M. amadeus84 at verizon.net
Sun Apr 15 02:27:04 UTC 2012


On Sat, 14 Apr 2012 09:45:50 -0700, John Wendel wrote:

> On 04/14/2012 08:20 AM, Amadeus W.M. wrote:
>>> If you really would like to get output in sequence, write to a pipe,
>>> and have a reader process drain the pipe to a logfile.  It's pretty
>>> easy; look at "mknod" with the 'p' option, or "mkfifo".  I'd still
>>> suggest tagging each output line with an identifier and sequence
>>> number.
>>>
>> For the sake of the argument, assume I echo 500 As, 500 Bs and 500 Cs.
>>
>> I don't care which process the output is coming from. It doesn't matter
>> which order the As, Bs and Cs are output. All I care about is that I
>> don't get 349As followed by 245Bs, etc. I want to see blocks of 500
>> each.
>>
>> I don't see how echoing into a pipe would change the problem.
>> Theoretically, if several processes (e.g. echo) are running in the
>> background, e.g. on a round robin basis, then potentially I could see
>> random sequences of As, Bs and Cs. It doesn't seem to be the case in
>> practice though. So which is it?
>>
>> This has to do with the operating system internals, it's not a trivial
>> question.
>>
> Actually it is semi-non-trivial. :-)
> 
> Unix/Linux makes the following guarantee ...
> 
> Multiple processes that open the same file for writing each maintain
> their own file positions, so they may overwrite the output of another
> process, unless the processes all open the file with the "O_APPEND"
> option. With the "O_APPEND" option, the system guarantees that the
> entire data from a single write by a process will be written to the end
> of the file as a indivisible block and will not be mixed with the output
> from another process. Without "O_APPEND", data from multiple processes
> may be intermixed in any order, or may seem to "disappear" (is
> overwritten by other data).
> 
> Of course, if you didn't write the code that is doing the output, you'll
> have to examine the source to see if it uses the "O_APPEND" open option.
> This may be non-trivial.
> 
> Regards,
> 
> John

Now we're getting somewhere. Any references for that? 

No, I didn't write the code and it's not echo, it's in fact curl. But >> 
instead of > should do, no?




More information about the users mailing list