[ale] Only one process
JK
jknapka at kneuro.net
Fri Jun 4 21:44:14 EDT 2010
I wrote:
> You really must have a "create-file-only-if-it-doesn't-already-exist"
> operation in order to make this work, and flock(1) is the first
To clarify: this is perfectly possible in a C program or whatever,
but in a shellscript something like:
echo $$ > /var/myname.pid
is NOT atomic.
Hmm, you could do:
echo $$ >> /var/myname.pid
and then check that the FIRST LINE contains your PID (via
"head -n 1 /var/myname.pid").
-- JK
On 6/4/2010 7:26 PM, JK wrote:
>
>
> On 6/4/2010 7:16 PM, scott wrote:
>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
>>
>>
>> On Jun 4, 2010, at 8:49 PM, JK wrote:
>>
>>> Doesn't anybody worry about race conditions any more?
>
>>
>> when I write scripts that I dont want to run in parallel. I check for a /var/run/*.pid file
>> related to the script and if the PID in it isnt mine, then I abort out. if the file isnt there, I
>> create it with my PID. And when the script exits it removes the file.
>
>
> You would appear to have a race condition if two instances
> are started approximately simultaneously:
>
> script 1:
> check for /var/myname.pid - not found
>
> CONTEXT SWITCH
>
> script 2:
> check for /var/myname.pid - not found
>
> CONTEXT SWITCH
>
> script 1:
> create /var/myname.pid
> write my pid
>
> CONTEXT SWITCH
>
> script 2:
> create /var/myname.pid
> write my pid
>
> Script 1 is now happily running with the wrong pid in /var/myname.pid.
> You really must have a "create-file-only-if-it-doesn't-already-exist"
> operation in order to make this work, and flock(1) is the first
> obvious thing I found that will do it. I thought "touch" might have
> some magic to do the trick, but no. (Disappointingly.)
>
> -- JK
>
>
--
Forget Jesus: stars died so that you could be here today.
- physicist Lawrence Krauss
More information about the Ale
mailing list