For*_*med 4 c linux background-process
2个问题:
1) 是否有任何 Linux/Posix API 可以知道某个进程是否已被调用为后台进程?
linux> myprogram &
Run Code Online (Sandbox Code Playgroud)
是否可以myprogram检测到它已被调用在后台运行的代码(通过&)?
2) 是否有任何 Linux/Posix API 可以使进程在后台运行,即使它已作为前台进程启动?IE 以某种方式在运行时从外壳“分离”..(要么将自身完全从外壳分离,要么作为外壳的后台进程运行)。
linux> myprogram
**** starting myprogram as a background job ****
linux>
Run Code Online (Sandbox Code Playgroud)
shell 提示应该立即返回给我,因为它myprogram已经与 shell 分离并在后台运行
1)有两种方法可以知道一个进程是否在后台
有一个信号处理程序SIGTTIN /SIGTTOUT并根据哪个信号处理程序(stdin/stdout)进行非阻塞读/写。
检查进程组并将其与终端匹配 getpgrp() == tcgetpgrp(STDOUT_FILENO)
您将需要重复检查,因为该过程可以随时前台或后台。
2)有一个daemon功能可以将进程置于后台。建议syslog在守护进程时将应用程序打印重定向到其他文件。
if (daemonize) {
//redirect all prints to syslog or some other logfile
daemon(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
在那里daemonize可以是arguement该应用是否进入背景或没有。
| 归档时间: |
|
| 查看次数: |
4095 次 |
| 最近记录: |