moshem
moshem

Reputation: 99

can't see some of the process names

I'm creating a simple program in python that should save my current processes (using linux and pycharm).

my class code:

class pidSaver:
    __pidDictionary={}
    def __init__(self):
        pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
        for pid in pids:
            try:
                os.kill(int(pid), 0)
            except OSError as e:
                if  e.errno != errno.EPERM: #no premission error
                    continue
            try:
                self.__pidDictionary[pid]=open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()
            except IOError: # proc has already terminated
                continue

    def getDic(self):
        return self.__pidDictionary

and my main code:

pidsTry = pidSaver()
printList= pidsTry.getDic()
keyList= list(printList.keys())
IntegerKeyList=[]
for key in keyList:
    IntegerKeyList.append(int(key))
IntegerKeyList.sort()
for key in IntegerKeyList:
    print "%d : %s" %(key ,printList[str(key)])

the output:

1 : /sbin/init
2 : 
3 : 
5 :
...
7543 : less 
...

so from some reason for some of the process I can't get a names and I got a blank out put. when I run on my computer the command ps -aux | less I got this result:

root         1  0.0  0.0  33776  4256 ?        Ss   אפר24   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    אפר24   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    אפר24   0:00 [ksoftirqd/0]
myUser     7543  0.0  0.0  13752  1548 pts/9    T    אפר24   0:00 less

so basically, the process that I cannot see in my python are the process that surrounded by "[]".

I don't understand why is this. Also, I want to get them too. how can I do it and why this is happening?

thank you!

Upvotes: 4

Views: 224

Answers (1)

Metalfreak
Metalfreak

Reputation: 149

These processes you can't see are kernel threads. As the name says they are running in kernel space and are therefore no childs of PID 1, i.e. the init system. Their cmdline is empty because they don't have any corresponding executable that gets called and no arguments to be passed, and this empty cmdline is a pretty safe way to identify them. If you still want to get their name it's in the file /proc/"pid"/status under the name field.

Upvotes: 2

Related Questions