You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2025/08/03 14:56:38 UTC
(nuttx-apps) branch master updated: nshlib: Add ppid support for command ps
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 8d2a7e32a nshlib: Add ppid support for command ps
8d2a7e32a is described below
commit 8d2a7e32a58e61e685a8a25b9c35c02f0bb949a9
Author: wangjianyu3 <wa...@xiaomi.com>
AuthorDate: Sun Aug 3 00:45:59 2025 +0800
nshlib: Add ppid support for command ps
Add parent process ID support for command ps,
get from "/proc/<PID>/group/status:Parent".
For example
nsh> sh
nsh> ps
PID PPID GROUP CPU PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK COMMAND
... ...
3 0 3 --- 100 RR Task - Waiting Signal 0000000000000000 0008136 nsh_main
... ...
9 3 9 0 100 RR Task - Running 0000000000000000 0004064 sh
nsh> sleep 100 &
sh [10:100]
nsh> ps
PID PPID GROUP CPU PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK COMMAND
... ...
3 0 3 --- 100 RR Task - Waiting Signal 0000000000000000 0008136 nsh_main
... ...
9 3 9 0 100 RR Task - Running 0000000000000000 0004064 sh
10 9 10 --- 100 RR Task - Waiting Signal 0000000000000000 0004040 sh -c sleep
Signed-off-by: wangjianyu3 <wa...@xiaomi.com>
---
nshlib/nsh_proccmds.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 63 insertions(+), 4 deletions(-)
diff --git a/nshlib/nsh_proccmds.c b/nshlib/nsh_proccmds.c
index 8811357f5..389ee71db 100644
--- a/nshlib/nsh_proccmds.c
+++ b/nshlib/nsh_proccmds.c
@@ -25,6 +25,7 @@
****************************************************************************/
#include <nuttx/config.h>
+#include <nuttx/sched.h>
#include <stdio.h>
#include <stdlib.h>
@@ -100,6 +101,7 @@ struct nsh_taskstatus_s
#endif
FAR char *td_cmdline; /* Command line */
int td_pid; /* Task ID */
+ int td_ppid; /* Parent task ID */
#ifdef NSH_HAVE_CPULOAD
FAR const char *td_cpuload; /* CPU load */
#endif
@@ -141,6 +143,7 @@ static const char g_scheduler[] = "Scheduler:";
#ifndef CONFIG_NSH_DISABLE_PSSIGMASK
static const char g_sigmask[] = "SigMask:";
#endif
+static const char g_ppid[] = "Parent:";
# ifdef PS_SHOW_HEAPSIZE
static const char g_heapsize[] = "AllocSize:";
# endif /* PS_SHOW_HEAPSIZE */
@@ -257,6 +260,28 @@ static void nsh_parse_statusline(FAR char *line,
}
#endif
}
+
+static void nsh_parse_gstatusline(FAR char *line,
+ FAR struct nsh_taskstatus_s *status)
+{
+ /* Parse the group status.
+ *
+ * Format:
+ *
+ * 111111111122222222223
+ * 123456789012345678901234567890
+ * Main task: nnnnn PID
+ * Parent: nnnnn Parent PID
+ * Flags: 0x** Group flags, See GROUP_FLAG_*
+ * Members: nnnn... Count of members
+ * Member IDs: nnnnn,nnnnn,... List of members{PID0, PID1, ...)
+ */
+
+ if (strncmp(line, g_ppid, strlen(g_ppid)) == 0)
+ {
+ status->td_ppid = atoi(&line[12]);
+ }
+}
#endif
/****************************************************************************
@@ -355,6 +380,7 @@ static int ps_record(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
#endif
status->td_cmdline = "";
status->td_pid = atoi(entryp->d_name);
+ status->td_ppid = INVALID_PROCESS_ID;
#ifdef NSH_HAVE_CPULOAD
status->td_cpuload = "";
#endif
@@ -395,6 +421,39 @@ static int ps_record(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
while (nextline != NULL);
}
+ ret = ps_readprocfs(vtbl, "group/status", dirpath, entryp, status);
+ if (ret >= 0)
+ {
+ /* Parse the group status. */
+
+ nextline = status->td_buf + status->td_bufpos;
+ do
+ {
+ /* Find the beginning of the next line and NUL-terminate the
+ * current line.
+ */
+
+ line = nextline;
+ for (nextline++;
+ *nextline != '\n' && *nextline != '\0';
+ nextline++);
+
+ if (*nextline == '\n')
+ {
+ *nextline++ = '\0';
+ }
+ else
+ {
+ nextline = NULL;
+ }
+
+ /* Parse the current line */
+
+ nsh_parse_gstatusline(line, status);
+ }
+ while (nextline != NULL);
+ }
+
#ifdef PS_SHOW_HEAPSIZE
if (heap)
{
@@ -553,7 +612,7 @@ static void ps_title(FAR struct nsh_vtbl_s *vtbl, bool heap)
#endif
nsh_output(vtbl,
- "%5s %5s "
+ "%5s %5s %5s "
#ifdef CONFIG_SMP
"%3s "
#endif
@@ -574,7 +633,7 @@ static void ps_title(FAR struct nsh_vtbl_s *vtbl, bool heap)
"%6s "
#endif
"%s\n"
- , "PID", "GROUP"
+ , "PID", "PPID", "GROUP"
#ifdef CONFIG_SMP
, "CPU"
#endif
@@ -620,7 +679,7 @@ static void ps_output(FAR struct nsh_vtbl_s *vtbl, bool heap,
#endif
nsh_output(vtbl,
- "%5d %5s "
+ "%5d %5d %5s "
#ifdef CONFIG_SMP
"%3s "
#endif
@@ -641,7 +700,7 @@ static void ps_output(FAR struct nsh_vtbl_s *vtbl, bool heap,
"%5s "
#endif
"%s\n"
- , status->td_pid, status->td_groupid
+ , status->td_pid, status->td_ppid, status->td_groupid
#ifdef CONFIG_SMP
, status->td_cpu
#endif