On 18-11-10 16:27, Bas van der Vlies wrote:
> Version: Community Edition 3.1.0
> os: debian
>
> I want to select proccess that have as parent "1". So we can watch for
> example ntpd.
>
> I have this process_select body:
> {
> ppid => irange("1", "1");
> process_result => "ppid";
> }
>
>
> But this fails on our systems:
> Setting local variable "match.0" context; $(0) = ntpd
> SelectProcess(ntp 7391 0.0 0.0 28240 1700 ? Ss 16:00
> 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:111)
> SplitProcLine(ntp 7391 0.0 0.0 28240 1700 ? Ss 16:00
> 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:111)
>
> The parent process is '?' for cfengine3. So this fails. I suspect that the
> ps command for debian systems is not correct.
>
>
>
maybe is better to use libproc for reading the process table than depending
on the command ps (also uses libproc library). Here a small example:
cc -o read_proc read_proc.c -lproc
{{{
#include <stdlib.h>
#include <stdio.h>
#include <proc/readproc.h>
#include <string.h>
int main()
{
proc_t **pptr;
proc_t *tmp;
pptr = readproctab(PROC_FILLCOM | PROC_FILLUSR | PROC_FILLSTAT);
for(; *pptr; pptr++) {
tmp = *pptr;
if ( tmp->cmdline != NULL )
{
printf("%d\n", strlen(*tmp->cmdline));
printf("tmp->cmdline = %s\n", *tmp->cmdline);
}
printf("tmp->tid = %d\n", tmp->tid);
printf("tmp->egid = %d\n", tmp->egid);
printf("tmp->egid = %d\n", tmp->egid);
printf("tmp->ppid = %d\n", tmp->ppid);
}
}
--
********************************************************************
* Bas van der Vlies e-mail: [email protected] *
* SARA - Academic Computing Services Amsterdam, The Netherlands *
********************************************************************
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine