簡體   English   中英

程序在被腳本調用時凍結!

[英]Program freezes when called by script!

我發帖前到處搜索,但找不到答案..

我需要為算法的執行時間計算一些統計數據(Avg、St. Dev.等),所以我有這個 c++ 程序(bb.exe),它啟動算法並輸出計算時間。

每當我從 shell 啟動這個程序時,它需要時間,但工作正常。

由於執行速度不是很快,我編寫了一個使用 system() 調用的 c 程序(CalculateStat)

system("bb.exe > output.txt");

執行多次以前的算法,然后計算所需的統計數據,所以我可以啟動“./CalculateStat”並在幾個小時后回來查看結果。

CalculateStat 輸出(在標准 Output 中)由 bb.exe 打印的每一行。

問題是當CalculateStat啟動bb.exe時,bb.exe會無緣無故地凍結(每6次計算凍結大約2次),所以我必須殺死它(ctrl + c)才能讓CalculateStat go打開。

起初,我認為這可能是“系統”調用的問題,所以我編寫了一個 perl 腳本,它做了幾乎相同的事情,但我遇到了同樣的問題。

有人有建議嗎?

編輯——我認為問題可能是對 output 文件的並發訪問,所以我從“CalculateStat”中刪除了讀取文件的部分,只留下連續調用..但它仍然凍結

編輯2--哇..它太奇怪了,所以我一直試圖從終端調用原始的bb.exe,它也凍結了..現在我知道問題只是bb隨機凍結,(它在測試期間從未凍結,它開始在統計計算時凍結..)

無論如何,現在這個問題沒有意義..對不起大家:(

嗯,我不明白你為什么使用 C 程序來重復啟動一個程序。 您不能直接從 shell 腳本執行此操作。 如果它再次凍結,它將縮小搜索的 scope。

您應該能夠使用 ps 命令查看該進程正在執行的操作。 我的猜測是它阻止了您沒有重定向的“標准錯誤”文件句柄。 (使用 &> 而不是 > 將 stdout 和 stderr 都重定向到文件。)

你怎么知道它被凍結了? 文件中沒有添加任何內容? 那可能只是緩沖。 大多數程序會緩沖它們的 output ,除非它們正在寫入終端。

問題實際上是黑盒。當應用奇怪的參數時它被凍結了,我通過對主程序進行一些檢查來解決它。 謝謝大家!

暫無
暫無

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

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