Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

Cách tốt đẹp duy nhất tôi tìm thấy là:

import sys
import os

try:
        os.kill(int(sys.argv[1]), 0)
        print "Running"
except:
        print "Not running"

(Nguồn) nhưng điều này có đáng tin cậy không? Nó có hoạt động với mọi quy trình và mọi phân phối không?
But is this reliable? Does it work with every process and every distribution?

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

JWW

93,8K87 Huy hiệu vàng388 Huy hiệu bạc846 Huy hiệu đồng87 gold badges388 silver badges846 bronze badges

Đã hỏi ngày 1 tháng 9 năm 2008 lúc 15:20Sep 1, 2008 at 15:20

Andreas Thomasandreas ThomasAndreas Thomas

4.2603 Huy hiệu vàng22 Huy hiệu bạc15 Huy hiệu Đồng3 gold badges22 silver badges15 bronze badges

1

Rốt cuộc, câu trả lời của Mark là cách để đi, đó là lý do tại sao hệ thống tệp /Proc ở đó. Đối với một cái gì đó sao chép hơn một chút/có thể làm được:

 >>> import os.path
 >>> os.path.exists("/proc/0")
 False
 >>> os.path.exists("/proc/12")
 True

Đã trả lời ngày 1 tháng 9 năm 2008 lúc 18:06Sep 1, 2008 at 18:06

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

Aaron Maenpaaaaron MaenpaaAaron Maenpaa

Huy hiệu vàng 116K1194 Huy hiệu bạc108 Huy hiệu đồng11 gold badges94 silver badges108 bronze badges

1

Trên Linux, bạn có thể xem trong thư mục /Proc /$ PID để có được thông tin về quy trình đó. Trong thực tế, nếu thư mục tồn tại, quá trình đang chạy.

Đã trả lời ngày 1 tháng 9 năm 2008 lúc 15:50Sep 1, 2008 at 15:50

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

Mark Harrisonmark HarrisonMark Harrison

290K121 Huy hiệu vàng325 Huy hiệu bạc457 Huy hiệu đồng121 gold badges325 silver badges457 bronze badges

Nó sẽ hoạt động trên bất kỳ hệ thống POSIX nào (mặc dù nhìn vào hệ thống tập tin /proc, như những người khác đã đề xuất, sẽ dễ dàng hơn nếu bạn biết nó sẽ ở đó).

Tuy nhiên: os.kill cũng có thể thất bại nếu bạn không có quyền báo hiệu quá trình. Bạn sẽ cần phải làm một cái gì đó như:

import sys
import os
import errno

try:
    os.kill(int(sys.argv[1]), 0)
except OSError, err:
    if err.errno == errno.ESRCH:
        print "Not running"
    elif err.errno == errno.EPERM:
        print "No permission to signal this process!"
    else:
        print "Unknown error"
else:
    print "Running"

Đã trả lời ngày 1 tháng 9 năm 2008 lúc 17:40Sep 1, 2008 at 17:40

Đây là giải pháp giải quyết nó cho tôi:

import os
import subprocess
import re

def findThisProcess( process_name ):
  ps     = subprocess.Popen("ps -eaf | grep "+process_name, shell=True, stdout=subprocess.PIPE)
  output = ps.stdout.read()
  ps.stdout.close()
  ps.wait()

  return output

# This is the function you can use  
def isThisRunning( process_name ):
  output = findThisProcess( process_name )

  if re.search('path/of/process'+process_name, output) is None:
    return False
  else:
    return True

# Example of how to use
if isThisRunning('some_process') == False:
  print("Not running")
else:
  print("Running!")

Tôi là một Python + Linux Newbie, vì vậy điều này có thể không tối ưu. Nó đã giải quyết vấn đề của tôi, và hy vọng cũng sẽ giúp đỡ người khác.

Đã trả lời ngày 9 tháng 11 năm 2010 lúc 21:49Nov 9, 2010 at 21:49

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

Sivabudhsivabudhsivabudh

31.1K60 Huy hiệu vàng159 Huy hiệu bạc226 Huy hiệu Đồng60 gold badges159 silver badges226 bronze badges

2

Tôi sử dụng điều này để có được các quy trình và số lượng của quy trình của tên được chỉ định

import os

processname = 'somprocessname'
tmp = os.popen("ps -Af").read()
proccount = tmp.count(processname)

if proccount > 0:
    print(proccount, ' processes running of ', processname, 'type')

Đã trả lời ngày 15 tháng 8 năm 2013 lúc 18:54Aug 15, 2013 at 18:54

Felbusfelbusfelbus

2.5992 Huy hiệu vàng23 Huy hiệu bạc29 Huy hiệu đồng2 gold badges23 silver badges29 bronze badges

1

Nhưng điều này có đáng tin cậy không? Nó có hoạt động với mọi quy trình và mọi phân phối không?

Có, nó nên hoạt động trên bất kỳ phân phối Linux. Xin lưu ý rằng /Proc không dễ dàng có sẵn trên các hệ thống dựa trên Unix, mặc dù (FreeBSD, OSX).

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

JWW

93,8K87 Huy hiệu vàng388 Huy hiệu bạc846 Huy hiệu đồng87 gold badges388 silver badges846 bronze badges

Đã hỏi ngày 1 tháng 9 năm 2008 lúc 15:20Sep 5, 2008 at 11:02

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

Andreas Thomasandreas ThomasMarius

4.2603 Huy hiệu vàng22 Huy hiệu bạc15 Huy hiệu Đồng3 gold badges27 silver badges30 bronze badges

Rốt cuộc, câu trả lời của Mark là cách để đi, đó là lý do tại sao hệ thống tệp /Proc ở đó. Đối với một cái gì đó sao chép hơn một chút/có thể làm được:

Đã trả lời ngày 1 tháng 9 năm 2008 lúc 18:06Feb 24, 2011 at 23:51

Hướng dẫn python check if process is running linux - python kiểm tra xem tiến trình có đang chạy linux không

Aaron Maenpaaaaron Maenpaatimblaktu

Huy hiệu vàng 116K1194 Huy hiệu bạc108 Huy hiệu đồng3 silver badges11 bronze badges

1

Trên Linux, bạn có thể xem trong thư mục /Proc /$ PID để có được thông tin về quy trình đó. Trong thực tế, nếu thư mục tồn tại, quá trình đang chạy.

#proc    -> name/id of the process
#id = 1  -> search for pid
#id = 0  -> search for name (default)

def process_exists(proc, id = 0):
   ps = subprocess.Popen("ps -A", shell=True, stdout=subprocess.PIPE)
   ps_pid = ps.pid
   output = ps.stdout.read()
   ps.stdout.close()
   ps.wait()

   for line in output.split("\n"):
      if line != "" and line != None:
        fields = line.split()
        pid = fields[0]
        pname = fields[3]

        if(id == 0):
            if(pname == proc):
                return True
        else:
            if(pid == proc):
                return True
return False

Đã trả lời ngày 1 tháng 9 năm 2008 lúc 15:50

Mark Harrisonmark HarrisonAug 2, 2012 at 20:05

290K121 Huy hiệu vàng325 Huy hiệu bạc457 Huy hiệu đồng

def process_exists(proc_name):
    ps = subprocess.Popen("ps ax -o pid= -o args= ", shell=True, stdout=subprocess.PIPE)
    ps_pid = ps.pid
    output = ps.stdout.read()
    ps.stdout.close()
    ps.wait()

    for line in output.split("\n"):
        res = re.findall("(\d+) (.*)", line)
        if res:
            pid = int(res[0][0])
            if proc_name in res[0][1] and pid != os.getpid() and pid != ps_pid:
                return True
    return False

Nó sẽ hoạt động trên bất kỳ hệ thống POSIX nào (mặc dù nhìn vào hệ thống tập tin /proc, như những người khác đã đề xuất, sẽ dễ dàng hơn nếu bạn biết nó sẽ ở đó).Aug 10, 2011 at 9:31

Tuy nhiên: os.kill cũng có thể thất bại nếu bạn không có quyền báo hiệu quá trình. Bạn sẽ cần phải làm một cái gì đó như:Maksym Kozlenko

Đã trả lời ngày 1 tháng 9 năm 2008 lúc 17:402 gold badges65 silver badges54 bronze badges

Làm thế nào tôi có thể biết nếu tập lệnh Python đang chạy trên Linux?

Tôi thường sử dụng ps -fa |Grep Python để xem quy trình nào đang chạy.CMD sẽ cho bạn thấy những tập lệnh Python bạn đã chạy, mặc dù nó sẽ không cung cấp cho bạn thư mục của tập lệnh.ps -fA | grep python to see what processes are running. The CMD will show you what python scripts you have running, although it won't give you the directory of the script.

Làm thế nào tôi có thể biết nếu một quy trình cụ thể đang chạy?

Các lệnh bash để kiểm tra quy trình chạy: Lệnh PGREP - Xem qua các quy trình bash hiện đang chạy trên Linux và liệt kê ID quy trình (PID) trên màn hình.Lệnh PIDOF-Tìm ID quy trình của chương trình đang chạy trên hệ thống Linux hoặc UNIX.pgrep command – Looks through the currently running bash processes on Linux and lists the process IDs (PID) on screen. pidof command – Find the process ID of a running program on Linux or Unix-like system.