killall für Linux

Code-Stücke können hier veröffentlicht werden.
Antworten
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Montag 14. Juli 2008, 10:26

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2008 Jens Kadenbach <j.kadenbach@gmx.de>

# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.

from __future__ import with_statement

import os
import signal
from os import path

PROC = path.join('/', 'proc')

def get_processes():
    for d in os.listdir(PROC):
        process = path.join(PROC, d) 
        try:
            data = {}
            with open(path.join(process, 'status'), 'r') as status:
                for line in status:
                    name, value = line.split(':')
                    data[name.lower()] = value.strip()
            with open(path.join(process, 'cmdline'), 'r') as cmdline:
                data['cmdline'] = cmdline.read().replace('\0', ' ').strip()
            yield data
        except IOError:
            pass

def killall(name):
    for process in get_processes():
        if name in process.values():
            os.kill(int(process['pid']), signal.SIGTERM)

if __name__ == '__main__':
    killall(raw_input("Prozesse mit folgendem Namen killen: "))
lunar

Montag 14. Juli 2008, 11:21

Code: Alles auswählen

data['cmdline'] = cmdline.read().replace('\0', ' ').strip()
Das würde ich durch folgendes ersetzen:

Code: Alles auswählen

data['cmdline'] = cmdline.read().split('\0')[0]
Dadurch erhältst du wirklich nur den Pfad der ausführbaren Datei, Optionen bleiben beim Killen unberücksichtigt.

Und ich sehe: Die Lizenz stimmt :D
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Montag 14. Juli 2008, 11:42

Bei dem Fall, wofür ich das Snippet geschrieben habe, ging es glaube ich darum, in der ganzen Cmdline zu suchen, weiß allerdings nicht mehr, warum :D
Antworten