Add group ID or parent PID to procfs output (if available)

This commit is contained in:
Gregory Nutt 2015-11-30 06:58:06 -06:00
parent 96f57eb0d9
commit 1c8216a6ce
1 changed files with 41 additions and 0 deletions

View File

@ -72,6 +72,18 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* See include/nuttx/sched.h: */
#undef HAVE_GROUPID
#if defined(CONFIG_SCHED_HAVE_PARENT) && defined(CONFIG_SCHED_CHILD_STATUS)
# define HAVE_GROUPID 1
#endif
#ifdef CONFIG_DISABLE_PTHREAD
# undef HAVE_GROUPID
#endif
/* Determines the size of an intermediate buffer that must be large enough
* to handle the longest line generated by this logic.
*/
@ -362,6 +374,8 @@ static FAR const struct proc_node_s *proc_findnode(FAR const char *relpath)
* 123456789012345678901234567890
* Name: xxxx... Task/thread name (See CONFIG_TASK_NAME_SIZE)
* Type: xxxxxxx {Task, pthread, Kthread, Invalid}
* PPID: xxxxx Parent thread ID
* Group: xxxxx Group ID
* State: xxxxxxxx,xxxxxxxxx {Invalid, Waiting, Ready, Running, Inactive},
* {Unlock, Semaphore, Signal, MQ empty, MQ full}
* Flags: xxx N,P,X
@ -375,6 +389,9 @@ static ssize_t proc_status(FAR struct proc_file_s *procfile,
FAR struct tcb_s *tcb, FAR char *buffer,
size_t buflen, off_t offset)
{
#ifdef HAVE_GROUPID
FAR struct task_group_s *group;
#endif
FAR const char *policy;
FAR const char *name;
size_t remaining;
@ -421,6 +438,30 @@ static ssize_t proc_status(FAR struct proc_file_s *procfile,
return totalsize;
}
#ifdef CONFIG_SCHED_HAVE_PARENT
#ifdef HAVE_GROUPID
group = tcb->group;
DEBUGASSERT(group);
linesize = snprintf(procfile->line, STATUS_LINELEN, "%-12s%d\n", "Group:",
group->tg_pgid);
#else
linesize = snprintf(procfile->line, STATUS_LINELEN, "%-12s%d\n", "PPID:",
tcb->ppid);
#endif
copysize = procfs_memcpy(procfile->line, linesize, buffer, remaining, &offset);
totalsize += copysize;
buffer += copysize;
remaining -= copysize;
if (totalsize >= buflen)
{
return totalsize;
}
#endif
/* Show the thread state */
linesize = snprintf(procfile->line, STATUS_LINELEN, "%-12s%s\n", "State:",