-- Emanuele Lombardi mail: AMB-GEM-CLIM ENEA Casaccia I-00060 S.M. di Galeria (RM) ITALY mailto:lele_at_mantegna.casaccia.enea.it tel +39 6 30483366 fax +39 6 30483591 This transmission was made possible by 100% recycled electrons. -------------------------------------------------------------- Arrigo Triulzi <arrigo_at_albourne.com> Why don't you have a look at Linux pstree and see if any of the code there is portable? Available from all good Linux mirrors, e.g. ftp://sunsite.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/ Alternatively, have a look at the source code for autonice which has been posted to alpha-osf-managers, some time in 1995. -------------------------------------------------------------------- Lucio Chiappetti <lucio_at_ifctr.mi.cnr.it> He suggesetd to make a filter of ps output. -------------------------------------------------------------------- Kurt Carlson <snkac_at_java.sois.alaska.edu> The program uaklogin within: ftp://raven.alaska.edu/pub/sois/README.uakpacct ftp://raven.alaska.edu/pub/sois/man.uaklogin kit: ftp://raven.alaska.edu/pub/sois/uakpacct-v2.7.tar.Z does this (and a couple other things). Does contain a callable routine in C for gathering the pids and linking the ancestry. k --------------------------------------------------------------------- "Moore, Chuck" <ChuckM_at_DIS.WA.GOV> He has done something like what I need using REXX on AIX BUT I've not REXX ---------------------------------------------------------------------- ronny_eliahu_at_corp.disney.com While back, I wrote such a C code and later, after installing Performance Manager (Digital UNIX Associated Products Volume 2), I found out a script called process_tree in /var/opt/pm/SMscripts which may be something you may want to check out. Basically this script parses out the ps command to display a tree of all processes with child, sons, nephew nicely tabbed --The only thing is that you can not pass any arguments to process_tree script to report on particular PID. >>>>> from lele: I tried to execute /var/opt/pm/SMscripts/process_tree but I get error <<<<< --------------------------- here Lars's C program (perfectely running) ------------------------------------------------------------------------ Lars Bro <lbr_at_dksin.dk> Hi, Emanuele I have put something together here that you can try. It is not tested properly so please do that. The function list_family(int ppid) lists all descendants of ppid into the array ctab of integers. The array is terminated with -1 as processes cannot have PID== -1. The integer nc tells how many were found. Please remember to free() the array when finished. list_family(), ctab and nc could be global symbols whereas ptab, np and traverse should be private. yours, Lars Bro #include <limits.h> #include <sys/table.h> static struct tbl_procinfo *ptab; static int np; int *ctab; int nc; static int traverse(int ppid) { int i; for(i = 0; i< np; i++) if ( ptab[i].pi_status != PI_EMPTY && ptab[i].pi_ppid == ppid) { nc++; ctab = (int *)realloc(ctab, sizeof(int)*(nc + 1)); ctab[nc]=-1; ctab[nc-1]=(ptab[i].pi_pid); traverse(ptab[i].pi_pid); } } list_family(int ppid) { int i, cc; int *childlist; nc = 0; ctab = (int*)malloc(sizeof(int)*(nc + 1)); ctab[nc]=-1; np = table(TBL_PROCINFO, 0, (void*)0, INT_MAX, 0); if (np < 0) { perror("table"); return -1; } if (np == 0) return 0; ptab = (struct tbl_procinfo*) malloc(np*(sizeof(struct tbl_procinfo))); cc = table(TBL_PROCINFO, 0, ptab, np, sizeof(struct tbl_procinfo)); if (cc < 0) { perror("table"); free(ptab); return -1; } traverse(ppid); free(ptab); return 0; } main() { int i; if (list_family(9539) == 0) { printf("found %d members\n", nc); for(i=0; ctab[i]!=-1; i++) printf("in family %d\n", ctab[i]); free(ctab); } else printf("went wrong\n"); } ----------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- On 2 Dec, To: alpha-osf-managers_at_ornl.gov wrote: > > I'm here asking for some C help. > > I'm not a C programmer: I'm only able to cut & paste others C programs. > BUT > I need to make a C program which ,given a PID, returns the PIDs of all > its descendants (sons, nephews...) . > > I tried to use table(2) but I'm not good enough to make a clean & > working code. > > Any help willbe greatly apreciated. > > thanks, > > Emanuele >Received on Fri Dec 04 1998 - 14:17:15 NZDT
This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:38 NZDT