如何在使用shell的后台运行linux应用程序?

时间:2014-10-20 11:11:10

标签: linux shell background-process

我有一个来自C程序的应用程序/二进制文件,默认情况下使用shell从用户那里获取输入。因此,当我使用&在后​​台启动应用程序时,它会自动停止,因为我无法访问的实现。当我运行此代码时

iStatus = system("./flute-static -send -a232.0.0.1/6666 a.txt &");

它提供输出[1] 21970,即pid。

然后,如果我按下另一个输入,它会输出

[1]+  Stopped                 ./flute-static -send -a232.0.0.1/6666 a.txt

显然它无法发送数据。我该如何解决这个问题。请帮我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试nohup

iStatus = system("nohup ./flute-static -send -a232.0.0.1/6666 a.txt &");

Nohup意味着:即使stty被切断,也不要终止此过程。

或者您可以使用screen

https://www.mattcutts.com/blog/a-quick-tutorial-on-screen/

答案 1 :(得分:0)

阅读Advanced Linux Programmingfork system call;您肯定希望将fork(2)execve(2)waitpid(2)与其他syscalls(2)和/或daemon(3)和/或popen(3)一起使用。在flute-static程序中使用strace(1)可能有助于您了解更多信息。

顺便说一下,您可以使用一些FLUTE library(从源代码中编译MAD-ALCLIB!),或者只使用HTTP& FTP客户端库,如libcurl

无论你做什么,如果后台进程正在读取标准输入,它就会被停止(参见signal(7)tty(4)等等)!另请阅读tty demystified