[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