Hi Tibor,

I've updated my portable patch implementation I posted some months ago
to the users list.

Ferran
A more portable implementation that should work on Linux, Solaris and
Digital Unix.  Not tested on FreeBSD.

It should also be faster than CDS Invenio 0.92.0, implementation, because 
it calls only one external command (ps), and not 3 (ps, grep --twice-- and
sed).

---
 modules/bibsched/lib/bibsched.py |   19 +++++++++----------
 1 files changed, 9 insertions(+), 10 deletions(-)

Index: cds-invenio/modules/bibsched/lib/bibsched.py
===================================================================
--- cds-invenio.orig/modules/bibsched/lib/bibsched.py	2007-03-01 15:41:38.000000000 +0100
+++ cds-invenio/modules/bibsched/lib/bibsched.py	2007-04-11 14:26:46.301060324 +0200
@@ -44,6 +44,7 @@
 import curses.panel
 from curses.wrapper import wrapper
 import signal
+import pwd
 
 from invenio.config import \
      CFG_PREFIX, \
@@ -75,16 +76,14 @@
         return None
 
 def get_my_pid(process, args=''):
-    if sys.platform.startswith('freebsd'):
-        COMMAND = "ps -o pid,args | grep '%s %s' | grep -v 'grep' | sed -n 1p" % (process, args)
-    else:
-        COMMAND = "ps -C %s o '%%p%%a' | grep '%s %s' | grep -v 'grep' | sed -n 1p" % (process, process, args)
-    answer = string.strip(os.popen(COMMAND).read())
-    if answer == '':
-        answer = 0
-    else:
-        answer = answer[:string.find(answer,' ')]
-    return int(answer)
+    COMMAND = "ps -fu %s" % (pwd.getpwuid(os.getuid())[0])
+    pslist = os.popen(COMMAND).readlines()
+    str = string.join([process,args])
+    answer = 0
+    for ps in pslist:
+        if ps.find(str) > 0:
+            answer = int(ps.split()[1])
+    return answer
         
 def get_output_channelnames(task_id):
     "Construct and return filename for stdout and stderr for the task 'task_id'."

Reply via email to