[libvirt] [PATCH v2 1/4] Add virDomainSendProcessSignal API
Eric Blake
eblake at redhat.com
Thu Nov 29 14:09:15 UTC 2012
> Add an API for sending signals to arbitrary processes in the
> guest OS. This is primarily useful for container based virt,
> but can be used for machine virt too, if there is a suitable
> guest agent,
>
> * include/libvirt/libvirt.h.in: Add virDomainSendProcessSignal
> and virDomainProcessSignal enum
> * src/driver.h: Driver entry point
> * src/libvirt.c, src/libvirt_public.syms: Impl for new API
> ---
> include/libvirt/libvirt.h.in | 97
> ++++++++++++++++++++++++++++++++++++++++++++
> src/driver.h | 7 ++++
> src/libvirt.c | 84
> ++++++++++++++++++++++++++++++++++++++
> src/libvirt_public.syms | 1 +
> 4 files changed, 189 insertions(+)
> + *
> + * Do not rely on all values matching Linux though. It is possible
Why two spaces mid-sentence?
> + VIR_DOMAIN_PROCESS_SIGNAL_RT32 = 64, /* SIGRTMIN + 32 /
> SIGRTMAX */
Yes, this works better for me.
> +
> +#ifdef VIR_ENUM_SENTINELS
> + /* This is the "last" signal only in so much as none
> + * of the latter ones have named constants. They are
> + * just numeric offsets from RTMIN upwards
This comment is now out of date.
> +/**
> + * virDomainSendProcessSignal:
> + * @domain: pointer to domain object
> + * @pid_value: a positive integer process ID, or negative integer
> process group ID
> + * @signum: a signal from the virDomainProcessSignal enum
> + * @flags: one of the virDomainProcessSignalFlag values
> + *
> + * Send a signal to the designated process in the guest
> + *
> + * The signal numbers must be taken from the virDomainProcessSignal
> + * enum. These will be translated to the corresponding signal
> + * number for the guest OS, by the guest agent delivering the
> + * signal. If there is no mapping from virDomainProcessSignal to
> + * the native OS signals, this API will report an error
s/$/./
> + *
> + * If @pid_value is an integer greater than zero, it is
> + * treated as a process ID. If @pid_value is an integer
> + * less than zero, it is treated as a process group ID.
> + * All the @pid_value numbers are from the container/guest
> + * namespace. The value zero is not valid.
> + *
> + * Not all hypervisors will support sending signals to
> + * arbitrary processes or process groups. If this API is
> + * implemented the minimum requirement is to be able to
> + * use @pid_value==1 (ie kill init). No other value is
s/ie/i.e./
> +
> + if (signum > VIR_DOMAIN_PROCESS_SIGNAL_LAST) {
> + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> + goto error;
> + }
Drop this hunk (rather, move it to patch 4/4). Such a check
should be done in the hypervisor driver, not in the entry
point. Otherwise, if we add a new signal later, this hunk
would prevent an older virsh from sending the new signal.
ACK with those changes.
More information about the libvir-list
mailing list