Since lsof will show a file open for execution before a write of the pid is committed, use a grep on lsof for the count of opened copies. If greater than one, exit.<br><br><br><div class="gmail_quote">On Fri, Jun 4, 2010 at 9:44 PM, JK <span dir="ltr">&lt;<a href="mailto:jknapka@kneuro.net">jknapka@kneuro.net</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">I wrote:<br>
<br>
 &gt; You really must have a &quot;create-file-only-if-it-doesn&#39;t-already-exist&quot;<br>
 &gt; operation in order to make this work, and flock(1) is the first<br>
<br>
</div>To clarify: this is perfectly possible in a C program or whatever,<br>
but in a shellscript something like:<br>
<br>
   echo $$ &gt; /var/myname.pid<br>
<br>
is NOT atomic.<br>
<br>
Hmm, you could do:<br>
<br>
   echo $$ &gt;&gt; /var/myname.pid<br>
<br>
and then check that the FIRST LINE contains your PID (via<br>
&quot;head -n 1 /var/myname.pid&quot;).<br>
<font color="#888888"><br>
-- JK<br>
</font><div><div></div><div class="h5"><br>
<br>
On 6/4/2010 7:26 PM, JK wrote:<br>
&gt;<br>
&gt;<br>
&gt; On 6/4/2010 7:16 PM, scott wrote:<br>
&gt;&gt; -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Jun 4, 2010, at 8:49 PM, JK wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Doesn&#39;t anybody worry about race conditions any more?<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; when I write scripts that I dont want to run in parallel.  I check for a /var/run/*.pid file<br>
&gt;&gt; related to the script and if the PID in it isnt mine, then I abort out. if the file isnt there, I<br>
&gt;&gt; create it with my PID.  And when the script exits it removes the file.<br>
&gt;<br>
&gt;<br>
&gt; You would appear to have a race condition if two instances<br>
&gt; are started approximately simultaneously:<br>
&gt;<br>
&gt; script 1:<br>
&gt;     check for /var/myname.pid - not found<br>
&gt;<br>
&gt; CONTEXT SWITCH<br>
&gt;<br>
&gt; script 2:<br>
&gt;     check for /var/myname.pid - not found<br>
&gt;<br>
&gt; CONTEXT SWITCH<br>
&gt;<br>
&gt; script 1:<br>
&gt;     create /var/myname.pid<br>
&gt;     write my pid<br>
&gt;<br>
&gt; CONTEXT SWITCH<br>
&gt;<br>
&gt; script 2:<br>
&gt;     create /var/myname.pid<br>
&gt;     write my pid<br>
&gt;<br>
&gt; Script 1 is now happily running with the wrong pid in /var/myname.pid.<br>
&gt; You really must have a &quot;create-file-only-if-it-doesn&#39;t-already-exist&quot;<br>
&gt; operation in order to make this work, and flock(1) is the first<br>
&gt; obvious thing I found that will do it.  I thought &quot;touch&quot; might have<br>
&gt; some magic to do the trick, but no. (Disappointingly.)<br>
&gt;<br>
&gt; -- JK<br>
&gt;<br>
&gt;<br>
<br>
<br>
--<br>
Forget Jesus: stars died so that you could be here today.<br>
  - physicist Lawrence Krauss<br>
_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>-- <br>James P. Kinney III<br>Actively in pursuit of Life, Liberty and Happiness <br>Doing pretty well on all 3 pursuits       <br><br>