[lttng-dev] how to get relayd pid
Anand Neeli
anand.neeli at gmail.com
Wed Apr 8 09:42:52 EDT 2015
Phil,
Thanks a lot for the code
Anand Neeli
On Wed, Apr 8, 2015 at 2:05 AM, Philippe Proulx <eeppeliteloop at gmail.com>
wrote:
> Anand,
>
> On Tue, Apr 7, 2015 at 4:19 PM, Anand Neeli <anand.neeli at gmail.com> wrote:
> > For C
>
> lttng-relayd does not write its PID to a file.
>
> For C, here's the programmatic way of getting the PID of the first
> lttng-relayd process found (inspired by [1]):
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <dirent.h>
>
> /* checks if the string is purely an integer
> * we can do it with `strtol' also
> */
> int check_if_number (char *str)
> {
> int i;
> for (i=0; str[i] != '\0'; i++)
> {
> if (!isdigit (str[i]))
> {
> return 0;
> }
> }
> return 1;
> }
>
> #define MAX_BUF 1024
> #define PID_LIST_BLOCK 32
>
> int *pidof (char *pname)
> {
> DIR *dirp;
> FILE *fp;
> struct dirent *entry;
> int *pidlist, pidlist_index = 0, pidlist_realloc_count = 1;
> char path[MAX_BUF], read_buf[MAX_BUF];
>
> dirp = opendir ("/proc/");
> if (dirp == NULL)
> {
> perror ("Fail");
> return NULL;
> }
>
> pidlist = malloc (sizeof (int) * PID_LIST_BLOCK);
> if (pidlist == NULL)
> {
> return NULL;
> }
>
> while ((entry = readdir (dirp)) != NULL)
> {
> if (check_if_number (entry->d_name))
> {
> strcpy (path, "/proc/");
> strcat (path, entry->d_name);
> strcat (path, "/comm");
>
> /* A file may not exist, it may have been removed.
> * dut to termination of the process. Actually we need to
> * make sure the error is actually file does not exist to
> * be accurate.
> */
> fp = fopen (path, "r");
> if (fp != NULL)
> {
> fscanf (fp, "%s", read_buf);
> if (strcmp (read_buf, pname) == 0)
> {
> /* add to list and expand list if needed */
> pidlist[pidlist_index++] = atoi (entry->d_name);
> if (pidlist_index == PID_LIST_BLOCK * pidlist_realloc_count)
> {
> pidlist_realloc_count++;
> pidlist = realloc (pidlist, sizeof (int) *
> PID_LIST_BLOCK * pidlist_realloc_count); //Error check todo
> if (pidlist == NULL)
> {
> return NULL;
> }
> }
> }
> fclose (fp);
> }
> }
> }
>
>
> closedir (dirp);
> pidlist[pidlist_index] = -1; /* indicates end of list */
> return pidlist;
> }
>
> int main (void)
> {
> int *list = pidof("lttng-relayd");
>
> if (!list || list[0] == -1) {
> fprintf(stderr, "lttng-relayd is not running!\n");
> free(list);
> return 1;
> }
>
> printf("PID of first lttng-relayd found: %d\n", list[0]);
> free(list);
>
> return 0;
> }
>
> [1]
> http://phoxis.org/2013/09/13/find-process-ids-of-a-running-process-by-name/
>
> Hope it helps,
> Phil
>
> >
> >
> >
> >
> > On Wed, Apr 8, 2015 at 1:45 AM, Philippe Proulx <eeppeliteloop at gmail.com
> >
> > wrote:
> >>
> >> Anand,
> >>
> >> On Tue, Apr 7, 2015 at 4:07 PM, Anand Neeli <anand.neeli at gmail.com>
> wrote:
> >> >
> >> > Hi All,
> >> > Is there any better way of getting lttng-relayd PID programmatically?
> >> >
> >> > like sessiond pid is in /var/run/lttng/lttng-sessiond.pid, is there
> any
> >> > similar way to get relayd PID?
> >>
> >> For which language?
> >>
> >> Phil
> >> >
> >> >
> >> > Thanks,
> >> > Anand Neeli
> >> >
> >> > _______________________________________________
> >> > lttng-dev mailing list
> >> > lttng-dev at lists.lttng.org
> >> > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> >> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20150408/9959b146/attachment-0001.html>
More information about the lttng-dev
mailing list