My technology blog
本文适用于Swift5以上语言,且项目为command line tool或者swift pm的execute项目。

方案一

在需要的时候启动一个线程

DispatchQueue.global().async {
    
}

放入

while true {
signal(SIGINT) { _ in
        // run something
    }
}

这确实可以有效阻断,但是感觉不太好,而且不能进行一些额外操作,会出现cxxxxx的报错。

方案二

查遍了所有资料和热心国外?(应该是国人但居住UK)网友的帮助下(Sweeper)成功找到了解决方案。

signal(SIGINT, SIG_IGN)

        let sigintSrc = DispatchSource.makeSignalSource(signal: SIGINT, queue: nil)
        sigintSrc.setEventHandler {
            // do something
        }
        sigintSrc.resume()

当然,你可以运行两遍print("\u{0008} \u{0008}", terminator: "")去掉control-c的标志。

You’ve successfully subscribed to UTS Blog
Welcome back! You’ve successfully signed in.
Great! You’ve successfully signed up.
Your link has expired
Success! Check your email for magic link to sign-in.