Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions lib/std/c.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2662,6 +2662,8 @@ pub const SIG = switch (native_os) {
pub const IOT: SIG = .ABRT;
pub const POLL: SIG = .EMT;

/// Invalid signal. Used in kill to perform checking without sending signal.
INVAL = 0,
/// hangup
HUP = 1,
/// interrupt
Expand Down Expand Up @@ -2756,6 +2758,7 @@ pub const SIG = switch (native_os) {
pub const RTMIN = 65;
pub const RTMAX = 126;

INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down Expand Up @@ -2821,6 +2824,7 @@ pub const SIG = switch (native_os) {

pub const POLL: SIG = .IO;

INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down Expand Up @@ -2895,6 +2899,7 @@ pub const SIG = switch (native_os) {

pub const IOT: SIG = .ABRT;

INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down Expand Up @@ -2941,6 +2946,7 @@ pub const SIG = switch (native_os) {

pub const IOT: SIG = .ABRT;

INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down Expand Up @@ -2989,6 +2995,7 @@ pub const SIG = switch (native_os) {

pub const IOT: SIG = .ABRT;

INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down Expand Up @@ -3035,6 +3042,7 @@ pub const SIG = switch (native_os) {

pub const IOT: SIG = .ABRT;

INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down
6 changes: 6 additions & 0 deletions lib/std/os/linux.zig
Original file line number Diff line number Diff line change
Expand Up @@ -3741,6 +3741,8 @@ pub const SIG = if (is_mips) enum(u32) {
pub const IOT: SIG = .ABRT;
pub const POLL: SIG = .IO;

INVAL = 0,

// /arch/mips/include/uapi/asm/signal.h#L25
HUP = 1,
INT = 2,
Expand Down Expand Up @@ -3787,6 +3789,8 @@ pub const SIG = if (is_mips) enum(u32) {
pub const PWR: SIG = .LOST;
pub const POLL: SIG = .IO;

/// Perform error checking without sending signal.
INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down Expand Up @@ -3830,6 +3834,8 @@ pub const SIG = if (is_mips) enum(u32) {
pub const POLL: SIG = .IO;
pub const IOT: SIG = .ABRT;

/// Perform error checking without sending signal.
INVAL = 0,
HUP = 1,
INT = 2,
QUIT = 3,
Expand Down
2 changes: 2 additions & 0 deletions lib/std/os/plan9.zig
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ pub fn getpid() u32 {
return tos.pid;
}
pub const SIG = struct {
/// Invalid signal. Used in kill to perform checking without sending signal.
pub const INVAL = 0;
/// hangup
pub const HUP = 1;
/// interrupt
Expand Down
3 changes: 3 additions & 0 deletions test/standalone/posix/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ const cases = [_]Case{
.{
.src_path = "relpaths.zig",
},
.{
.src_path = "kill.zig",
},
};

pub fn build(b: *std.Build) void {
Expand Down
24 changes: 24 additions & 0 deletions test/standalone/posix/kill.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const std = @import("std");
const posix = std.posix;
const builtin = @import("builtin");
const native_os = builtin.target.os.tag;

pub fn main() !void {
try test_kill_zero_self_should_succeed();
try test_kill_nonexistent();
}

fn test_kill_nonexistent() !void {
if ((native_os != .linux) and (native_os != .macos)) return;
// Linux is limited by PID_MAX_LIMIT constant which is around 4 million
// MacOS maximum pid appears to be 99999 and not configurable.
// Others are unknown thus not tested.
const impossible_pid: posix.pid_t = 1_999_999_999;
try std.testing.expectError(posix.KillError.ProcessNotFound, posix.kill(impossible_pid, .INVAL));
}

fn test_kill_zero_self_should_succeed() !void {
// Windows does not have kill -0 equivalent
if (native_os == .windows) return;
try posix.kill(posix.getpid(), .INVAL);
}