我试图在eInk-Display上显示一些值(通过SPI)。我已经编写了软件来初始化显示并显示作为命令行参数传递的值。问题是,由于采用eInk技术,显示器需要几秒钟才能完全实现,因此显示程序也在运行。
另一个(“Master” - )程序收集值并执行其他操作。它有一个主循环,必须循环至少10x /秒。 所以我想从主循环中启动显示程序并立即继续循环。
使用system()
或execl()
时,主程序要么等到显示程序结束,要么退出到新进程。
有没有办法从其他程序中启动其他程序,而它们之间没有任何进一步的连接?它应该在Linux上运行。 愿fork()成为解决方案吗?
答案 0 :(得分:2)
快速而肮脏的方式:使用带有后台后缀(system
)的&
char cmd[200];
sprintf("%190s &","your_command");
system(cmd);
请注意,它不可移植,因为它取决于底层shell。对于Windows,你会这样做:
sprintf("start %190s","your_command");
快速& amp;的主要缺点肮脏的解决方案是它“火与忘记”。如果程序无法正确执行,只要shell可以启动该进程,您仍然会有0返回代码。
一个可移植的方法(也允许处理进程的返回代码)稍微复杂一些,包括从线程或分叉的可执行文件运行系统调用。快速& dirty解决方案在幕后执行shell命令的fork
+ exec
。