Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Signal 示例

Signal 处理回调后,不处理信号默认行为

示例:

import std.env.*
import std.runtime.*

foreign func CJ_MCC_SignalKill(pid: Int32, sig: Int32): Unit

func sendSignal(sig: Int32): Unit {
    unsafe { CJ_MCC_SignalKill(Int32(getProcessId()), sig) }
    sleep(Duration.second)
}

func func_1(sig: Int32) {
    println("func_1_start_${sig}")
    return false
}

func func_2(sig: Int32) {
    println("func_2_start_${sig}")
    return true
}

let signal: Int32 = 3

main() {
    resetSignalHandler()
    registerSignalHandler(Signal(signal, "cj"), func_1)
    registerSignalHandler(Signal(signal, "cj"), func_2)
    spawn {
        sendSignal(signal) // 模拟发送信号
    }
    sleep(Duration.second * 1)
    println("end")
    return 0
}

可能的运行结果:

81632 E CJNative Handle signal: 3.
func_1_start_3
func_2_start_3
end

Signal 处理回调后,处理信号默认行为

示例:

import std.env.*
import std.runtime.*

foreign func CJ_MCC_SignalKill(pid: Int32, sig: Int32): Unit

func sendSignal(sig: Int32): Unit {
    unsafe { CJ_MCC_SignalKill(Int32(getProcessId()), sig) }
    sleep(Duration.second)
}

func func_1(sig: Int32) {
    println("func_1_start_${sig}")
    return false
}

func func_2(sig: Int32) {
    println("func_2_start_${sig}")
    return false
}

let signal: Int32 = 3

main() {
    resetSignalHandler()
    registerSignalHandler(Signal(signal, "cj"), func_1)
    registerSignalHandler(Signal(signal, "cj"), func_2)
    spawn {
        sendSignal(signal) // 模拟信号发送
    }
    sleep(Duration.second * 1)
    println("end")
    return 0
}

可能的运行结果:

82934 E CJNative Handle signal: 3.
func_1_start_3
func_2_start_3
[8]    82934 quit (core dumped)  ./main