在 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)
建议?
我有一个启动子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)