[libvirt] [PATCH 3/5] Introduce functions for checking whether a pidfile is valid

Jiri Denemark jdenemar at redhat.com
Fri Aug 12 18:05:27 UTC 2011


On Fri, Aug 12, 2011 at 15:07:21 +0100, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> In some cases the caller of virPidFileRead might like extra checks
> to determine whether the pid just read is really the one they are
> expecting. This adds virPidFileReadIfAlive which will check whether
> the pid is still alive with kill(0, -1), and (on linux only) will
> look at /proc/$PID/path
...
> diff --git a/src/util/virpidfile.c b/src/util/virpidfile.c
> index 25c3272..c7adbfc 100644
> --- a/src/util/virpidfile.c
> +++ b/src/util/virpidfile.c
...
> +int virPidFileReadPathIfAlive(const char *path,
> +                              pid_t *pid,
> +                              const char *binpath)
> +{
> +    int rc;
> +    char *procpath = NULL;
> +
> +    rc = virPidFileReadPath(path, pid);
> +    if (rc < 0)
> +        return rc;
> +
> +    /* Check that it's still alive */
> +    if (kill(*pid, 0) < 0) {
> +        *pid = -1;
> +        return 0;
> +    }
> +
> +    if (virAsprintf(&procpath, "/proc/%d/exe", *pid) < 0) {
> +        *pid = -1;
> +        return 0;
> +    }
> +#ifdef __linux__
> +    if (virFileLinkPointsTo(procpath, binpath) == 0)
> +        *pid = -1;
> +#endif
> +   VIR_FREE(procpath);
   ^^^ three spaces here instead of four

Jirka




More information about the libvir-list mailing list