procutils-skill 0.2.0

Send a signal to processes selected by user, tty, pid or command (obsolete; prefer pkill)
Documentation
//! Live-process tests for `skill`. skill is largely a thin wrapper
//! over the same selector + signal infrastructure as pkill, but it
//! takes free-form expression args (PIDs, usernames, ttys, command
//! names) rather than a regex pattern.
//!
//! Skipped automatically on systems without unprivileged user + PID
//! namespaces (some sandboxed CI runners).

use procutils_testutil::LiveSession;

const SKILL: &str = env!("CARGO_BIN_EXE_skill");

#[test]
fn skill_delivers_sigusr1_by_command() {
    if !procutils_testutil::pid_namespace_supported() {
        eprintln!("skipping: PID namespaces unavailable");
        return;
    }

    let session = LiveSession::new()
        .helper("signal_recipient", &["--rename=worker"])
        .target(SKILL, &["-USR1", "-c", "worker"])
        .run()
        .expect("session ran");

    assert_eq!(session.target.exit_code, Some(0));
    assert_eq!(
        session.helpers[0].exit_code,
        Some(libc::SIGUSR1),
        "helper outcome: {:?}",
        session.helpers[0],
    );
}

#[test]
fn skill_delivers_real_time_signal_by_pid() {
    if !procutils_testutil::pid_namespace_supported() {
        eprintln!("skipping: PID namespaces unavailable");
        return;
    }

    let expected = procutils_common::signal::rt_min() + 7;

    let session = LiveSession::new()
        .helper("signal_recipient", &[])
        .target(SKILL, &["-RTMIN+7", "{helper:0}"])
        .run()
        .expect("session ran");

    assert_eq!(session.target.exit_code, Some(0));
    assert_eq!(
        session.helpers[0].exit_code,
        Some(expected),
        "helper outcome: {:?}",
        session.helpers[0],
    );
}