|
|
c682bc |
From 8dc7ac166c30435d87a76bb5067724497a7ba592 Mon Sep 17 00:00:00 2001
|
|
|
c682bc |
From: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
|
c682bc |
Date: Thu, 11 Jun 2015 16:45:33 -0300
|
|
|
c682bc |
Subject: [PATCH 6/7] pflags: Add command line utility to print processor flags
|
|
|
c682bc |
|
|
|
c682bc |
E.g.:
|
|
|
c682bc |
|
|
|
c682bc |
$ ./pflags-cmd.py ssh*,bash,6941
|
|
|
c682bc |
1278 sshd RANDOMIZE|SUPERPRIV|USED_ASYNC|USED_MATH
|
|
|
c682bc |
2692 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
2919 bash RANDOMIZE|SUPERPRIV|USED_ASYNC|USED_MATH
|
|
|
c682bc |
3116 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
3149 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
3384 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
3579 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
3834 ssh RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
4372 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
5024 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
6339 bash RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
6941 vim FREEZER_SKIP|RANDOMIZE|USED_ASYNC|USED_MATH
|
|
|
c682bc |
$
|
|
|
c682bc |
|
|
|
c682bc |
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
|
c682bc |
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
|
c682bc |
---
|
|
|
c682bc |
pflags-cmd.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
c682bc |
1 file changed, 65 insertions(+)
|
|
|
c682bc |
create mode 100755 pflags-cmd.py
|
|
|
c682bc |
|
|
|
c682bc |
diff --git a/pflags-cmd.py b/pflags-cmd.py
|
|
|
c682bc |
new file mode 100755
|
|
|
c682bc |
index 000000000000..9228c688e7a2
|
|
|
c682bc |
--- /dev/null
|
|
|
c682bc |
+++ b/pflags-cmd.py
|
|
|
c682bc |
@@ -0,0 +1,65 @@
|
|
|
c682bc |
+#! /usr/bin/python
|
|
|
c682bc |
+# -*- python -*-
|
|
|
c682bc |
+# -*- coding: utf-8 -*-
|
|
|
c682bc |
+# print process flags
|
|
|
c682bc |
+# Copyright (C) 2015 Red Hat Inc.
|
|
|
c682bc |
+# Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
|
c682bc |
+#
|
|
|
c682bc |
+# This application is free software; you can redistribute it and/or
|
|
|
c682bc |
+# modify it under the terms of the GNU General Public License
|
|
|
c682bc |
+# as published by the Free Software Foundation; version 2.
|
|
|
c682bc |
+#
|
|
|
c682bc |
+# This application is distributed in the hope that it will be useful,
|
|
|
c682bc |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
c682bc |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
c682bc |
+# General Public License for more details.
|
|
|
c682bc |
+
|
|
|
c682bc |
+import procfs, re, fnmatch, sys
|
|
|
c682bc |
+
|
|
|
c682bc |
+ps = None
|
|
|
c682bc |
+
|
|
|
c682bc |
+def thread_mapper(s):
|
|
|
c682bc |
+ global ps
|
|
|
c682bc |
+
|
|
|
c682bc |
+ try:
|
|
|
c682bc |
+ return [ int(s), ]
|
|
|
c682bc |
+ except:
|
|
|
c682bc |
+ pass
|
|
|
c682bc |
+ try:
|
|
|
c682bc |
+ return ps.find_by_regex(re.compile(fnmatch.translate(s)))
|
|
|
c682bc |
+ except:
|
|
|
c682bc |
+ return ps.find_by_name(s)
|
|
|
c682bc |
+
|
|
|
c682bc |
+def main(argv):
|
|
|
c682bc |
+
|
|
|
c682bc |
+ global ps
|
|
|
c682bc |
+ ps = procfs.pidstats()
|
|
|
c682bc |
+
|
|
|
c682bc |
+ if (len(argv) > 1):
|
|
|
c682bc |
+ pids = reduce(lambda i, j: i + j, map(thread_mapper, argv[1].split(",")))
|
|
|
c682bc |
+ else:
|
|
|
c682bc |
+ pids = ps.processes.keys()
|
|
|
c682bc |
+
|
|
|
c682bc |
+ pids.sort()
|
|
|
c682bc |
+ len_comms = map(lambda pid: len(ps[pid]["stat"]["comm"]), pids)
|
|
|
c682bc |
+ max_comm_len = max(len_comms)
|
|
|
c682bc |
+ del(len_comms)
|
|
|
c682bc |
+
|
|
|
c682bc |
+ for pid in pids:
|
|
|
c682bc |
+ flags = ps[pid].stat.process_flags()
|
|
|
c682bc |
+ # Remove flags that were superseeded
|
|
|
c682bc |
+ if "PF_THREAD_BOUND" in flags and "PF_NO_SETAFFINITY" in flags:
|
|
|
c682bc |
+ flags.remove("PF_THREAD_BOUND")
|
|
|
c682bc |
+ if "PF_FLUSHER" in flags and "PF_NPROC_EXCEEDED" in flags:
|
|
|
c682bc |
+ flags.remove("PF_FLUSHER")
|
|
|
c682bc |
+ if "PF_SWAPOFF" in flags and "PF_MEMALLOC_NOIO" in flags:
|
|
|
c682bc |
+ flags.remove("PF_SWAPOFF")
|
|
|
c682bc |
+ if "PF_FREEZER_NOSIG" in flags and "PF_SUSPEND_TASK" in flags:
|
|
|
c682bc |
+ flags.remove("PF_FREEZER_NOSIG")
|
|
|
c682bc |
+ comm = ps[pid].stat["comm"]
|
|
|
c682bc |
+ flags.sort()
|
|
|
c682bc |
+ sflags = reduce(lambda i, j: "%s|%s" % (i, j), map(lambda a: a[3:],flags))
|
|
|
c682bc |
+ print "%6d %*s %s" %(pid, max_comm_len, comm, sflags)
|
|
|
c682bc |
+
|
|
|
c682bc |
+if __name__ == '__main__':
|
|
|
c682bc |
+ main(sys.argv)
|
|
|
c682bc |
--
|
|
|
c682bc |
1.8.3.1
|
|
|
c682bc |
|