diff --git a/include/pstree.h b/include/pstree.h index 0c9147148..47ce676a9 100644 --- a/include/pstree.h +++ b/include/pstree.h @@ -78,6 +78,11 @@ extern bool restore_before_setsid(struct pstree_item *child); extern int prepare_pstree(void); extern int dump_pstree(struct pstree_item *root_item); + +struct pstree_item *pstree_item_by_real(pid_t virt); +struct pstree_item *pstree_item_by_virt(pid_t virt); + +extern int pid_to_virt(pid_t pid); extern bool pid_in_pstree(pid_t pid); struct task_entries; diff --git a/pstree.c b/pstree.c index 116b5e7c6..d6b679435 100644 --- a/pstree.c +++ b/pstree.c @@ -778,14 +778,39 @@ bool restore_before_setsid(struct pstree_item *child) return false; } -bool pid_in_pstree(pid_t pid) +struct pstree_item *pstree_item_by_virt(pid_t virt) { struct pstree_item *item; for_each_pstree_item(item) { - if (item->pid.real == pid) - return true; + if (item->pid.virt == virt) + return item; } - - return false; + return NULL; +} + +struct pstree_item *pstree_item_by_real(pid_t real) +{ + struct pstree_item *item; + + for_each_pstree_item(item) { + if (item->pid.real == real) + return item; + } + return NULL; +} + +int pid_to_virt(pid_t real) +{ + struct pstree_item *item; + + item = pstree_item_by_real(real); + if (item) + return item->pid.virt; + return 0; +} + +bool pid_in_pstree(pid_t pid) +{ + return pstree_item_by_real(pid) != NULL; }