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 <wangjian...@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 <wangjian...@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