簡體   English   中英

如何將子進程的輸出重定向到syslog?

[英]how to redirect a child process's output to syslog?

我在freebsd下用C開發。 我正在使用cron作業來調用程序A,該程序使用fork()/ exec()來調用另一個程序B。在A中,我使用syslog()將日志寫入/ var / log / messages,但是B輸出到stdout因此,B的輸出未寫入/ var / log / messages。

如何在不修改B代碼的情況下也將B的輸出重定向到syslog? 我猜應該有某種機制可以將B的輸出重定向到A中的某些fd,但是由於我使用的是syslog()而不是直接在A中打開文件,因此我不確定這將如何工作。

感謝您的建議!

我不記得freebsd是否包含記錄程序。 如果是這樣,您的程序A可能可以調用B作為“ B | logger”的某種形式。 例如,代替

execl("/my/path/to/B", "B", NULL);

利用外殼:

execl("/bin/sh", "sh", "-c", "/my/path/to/B | logger", NULL);

記錄器程序還有其他選項,可將其消息定向到特定的syslog工具,以匹配A應用程序的行為。

缺少記錄器 ,您可能需要進行傳統的Posix管道擬合:使用pipe(2)創建管道,將管道的輸出端復制到B的stdout,然后讀取(在A中或在單獨的子進程中)管道的輸入端,用於將消息發送到syslog(3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM