> 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. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list