| From: Chunguang Wu <fullspring2018@gmail.com> |
| Subject: fs/proc: add Kthread flag to /proc/$pid/status |
| Date: Sun, 16 Apr 2023 13:24:04 +0800 |
| |
| The command `ps -ef ` and `top -c` mark kernel thread by '[' and ']', but |
| sometimes the result is not correct. The task->flags in /proc/$pid/stat |
| is good, but we need remember the value of PF_KTHREAD is 0x00200000 and |
| convert dec to hex. If we have no binary program and shell script which |
| read /proc/$pid/stat, we can know it directly by `cat /proc/$pid/status`. |
| |
| Link: https://lkml.kernel.org/r/20230416052404.2920-1-fullspring2018@gmail.com |
| Signed-off-by: Chunguang Wu <fullspring2018@gmail.com> |
| Reviewed-by: Randy Dunlap <rdunlap@infradead.org> |
| Cc: Alexey Dobriyan <adobriyan@gmail.com> |
| Cc: Jonathan Corbet <corbet@lwn.net> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| Documentation/filesystems/proc.rst | 2 ++ |
| fs/proc/array.c | 2 ++ |
| 2 files changed, 4 insertions(+) |
| |
| --- a/Documentation/filesystems/proc.rst~fs-proc-add-kthread-flag-to-proc-pid-status |
| +++ a/Documentation/filesystems/proc.rst |
| @@ -179,6 +179,7 @@ read the file /proc/PID/status:: |
| Gid: 100 100 100 100 |
| FDSize: 256 |
| Groups: 100 14 16 |
| + Kthread: 0 |
| VmPeak: 5004 kB |
| VmSize: 5004 kB |
| VmLck: 0 kB |
| @@ -256,6 +257,7 @@ It's slow but very precise. |
| NSpid descendant namespace process ID hierarchy |
| NSpgid descendant namespace process group ID hierarchy |
| NSsid descendant namespace session ID hierarchy |
| + Kthread kernel thread flag, 1 is yes, 0 is no |
| VmPeak peak virtual memory size |
| VmSize total program size |
| VmLck locked memory size |
| --- a/fs/proc/array.c~fs-proc-add-kthread-flag-to-proc-pid-status |
| +++ a/fs/proc/array.c |
| @@ -219,6 +219,8 @@ static inline void task_state(struct seq |
| seq_put_decimal_ull(m, "\t", task_session_nr_ns(p, pid->numbers[g].ns)); |
| #endif |
| seq_putc(m, '\n'); |
| + |
| + seq_printf(m, "Kthread:\t%c\n", p->flags & PF_KTHREAD ? '1' : '0'); |
| } |
| |
| void render_sigset_t(struct seq_file *m, const char *header, |
| _ |