:: Re: [DNG] issue with procps, any hi…
Inizio della pagina
Delete this message
Reply to this message
Autore: Didier Kryn
Data:  
To: dng@lists.dyne.org
Oggetto: Re: [DNG] issue with procps, any hints?
Le 20/12/2022 à 13:29, aitor a écrit :
> Hi,
> In order to simplify the code of simple-netaid i'm trying to get the tty of a running process
> using the struct `proc_t` declared the `procps` project:
> https://salsa.debian.org/debian/procps/-/blob/master/library/include/readproc.h
> Pay attention to the integer defined in the line nº 155:
>     int tty; // stat- full device number of controlling terminal
> This is indeed the value i'm trying to request, and a|ccording to the
> comment done at the right of the variable ||containing the word *stat*, this is supposedly the flag to be passed
> to openproc():|
>
> |https://manpages.debian.org/testing/procps/openproc.3.en.html
> |
>
> |i.e. the flag PROC_FILLSTAT, as shown in the following C program:|
>
> |
> |
>
> |______ MAIN.C _______
> |
>
> |#include <stdio.h>
> #include <stdlib.h>
> #include <proc/readproc.h>
>
> int main(int argc, char **argv)
> {
>   proc_t *proc_info;|
>
> |PROCTAB *proc = openproc(PROC_FILLSTAT);
>
>   while(proc_info = readproc(proc, NULL)) {
>
>     if(proc_info->tgid == atoi(argv[1])) {
>
>        printf("/dev/pts/%d\n", proc_info->tty);
>     }
>
>     freeproc(proc_info);
>  }
>
>   closeproc(proc);|
>
> |return 0;
> }
> |
>
> |_______ END ________|
>
> |
> |
>
> |You need to install libprocps-dev. Then, compile the program as follows:|
>
> |$ gcc main.c -o main -lprocps|
>
> |If you open a terminal and try to run the program passing the pid of
> the process as argument in the command line, that is:|
>
> |$ ./main $(echo $$)|
>
> |It should print the tty of the current terminal, in the same way as
> tty does:|
>
> |$ tty
> /dev/pts/4
> |
>
> |But this is what i'm getting instead:|
>
> |$ ./main $(echo $$)
> /dev/pts/34820|
>
> |As you can see, a very high number. Whereas the printed value should
> be equal to 4. If you try passing the pid of another running process,
> you'll get similar results or zero. Any thoughts on what's wrong in
> the program? |||May this be a bug in procps?| |
>
> |Thanks in advance,|
>


|    Maybe I didn't understand the whole question, but what about
readlink("/proc/self/fd/0", ...) ?|

|    I would always prefer seeking directly /proc than adding a library
dependency to do it.|

|--     Didier|