小编niC*_*Mel的帖子

可变参数宏中标记的串联

在 C 中,是否可以连接可变参数宏中的每个变量参数?

例子:

MY_MACRO(A, B, C) // will yield HDR_A, HDR_B, HDR_C
MY_MACRO(X, Y)    // will yield HDR_X, HDR_Y
Run Code Online (Sandbox Code Playgroud)

普通##运算符对可变参数宏具有特殊含义(避免空参数列表使用逗号)。使用 with 时的连接__VA_ARGS__只发生在第一个标记上。

例子:

#define MY_MACRO(...) HDR_ ## __VA_ARGS__

MY_MACRO(X, Y)    // yields HDR_X, Y
Run Code Online (Sandbox Code Playgroud)

建议?

c macros variadic

4
推荐指数
1
解决办法
4267
查看次数

Windows 上的子进程未收到信号 (SIGTERM)

我有一个启动子send_signal(SIGTERM)进程的服务器,我可以设法执行一个会终止该进程的操作。但并不优雅。如果我从 shell 调用我的子进程(即作为单个进程),则定义的信号处理程序将正常启动并退出。

server.py:(所以..从我第一次调用的另一个脚本start_app(),然后exit_app()

def start_app():
    app = subprocess.Popen("python app.py")

def exit_app():
    p = app.poll()
    if p==None:
        print("Subprocess is alive") # debug
    app.send_signal(signal.SIGTERM)
Run Code Online (Sandbox Code Playgroud)

应用程序

def exit_signal_handler(signal, frame):
    print("Terminate signal received")
    app.exit()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    signal.signal(signal.SIGTERM, exit_signal_handler)
    signal.signal(signal.SIGINT, exit_signal_handler)
    sys.exit(app.exec())
Run Code Online (Sandbox Code Playgroud)

同样,如果我从 shell 调用 app.py 并发送一个SIGTERM信号,我会得到一个跟踪Terminate signal received并关闭应用程序。但是当 app.py 由服务器启动并且我exit_app在服务器中调用时,我得到一个跟踪Subprocess is alive(来自 server.py)并且应用程序被杀死但信号没有被应用程序的信号处理程序捕获exit_signal_handler

编辑:这似乎send_signal()不发送信号,以在该子捕获信号意义上的子进程。它发送信号以在子进程上发生一个动作:

    def send_signal(self, sig):
        """Send a signal …
Run Code Online (Sandbox Code Playgroud)

python windows subprocess signals python-3.x

4
推荐指数
1
解决办法
5707
查看次数

标签 统计

c ×1

macros ×1

python ×1

python-3.x ×1

signals ×1

subprocess ×1

variadic ×1

windows ×1