From: eeppeliteloop@gmail.com (Philippe Proulx)
Subject: [lttng-dev] how to get relayd pid
Date: Tue, 7 Apr 2015 16:35:32 -0400 [thread overview]
Message-ID: <CAB4xu_34Ni=q9dYzQ=PXpjoyk2Qz04ZUPdB3=yYRiTR7TyXMHg@mail.gmail.com> (raw)
In-Reply-To: <CAM5kDqz1dkyV3R4_XRYdbBUjUB6z0ySbGNAS9faRwerroHDriA@mail.gmail.com>
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 prev parent reply other threads:[~2015-04-07 20:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-07 20:07 Anand Neeli
2015-04-07 20:15 ` Philippe Proulx
2015-04-07 20:19 ` Anand Neeli
2015-04-07 20:35 ` Philippe Proulx [this message]
2015-04-08 13:42 ` Anand Neeli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAB4xu_34Ni=q9dYzQ=PXpjoyk2Qz04ZUPdB3=yYRiTR7TyXMHg@mail.gmail.com' \
--to=eeppeliteloop@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox