1
我有一個程序通過管道輸入標準輸入數據; someapp | myprogram
如何檢測輸入上的破損管道?
我希望read
在破損管道上返回負值;它似乎並非如此。主循環看起來像這樣:
int rdsum = 0;
int rdsize = 0;
do
{
rdsize = read(STDIN_FILENO, buf, BUFSIZE);
if(rdsize > 0)
{
//[operations on the buffer]
rdsum += rdsize;
}
else if(rdsize == 0)
{
usleep(100000);
}
else return 0;
}
while(rdsum < blocksize);
當return 0;
時,程序將直接退出。或者至少它會,如果它發生了......
如果someapp
在someapp | myprogram
結束,或者被殺害,myprog
還活着,出現在ps
列表。 什麼是正確的方法來檢測餵養應用程序死亡/結束/被殺害,並在這種情況下戒菸?
哦...該死的,我花了這麼多年來寫了數百個非阻塞的'read()',而不是一個阻塞(RTOS的世界),一旦我寫一個阻塞的我完全忘記它的行爲。 .. 謝謝。 – 2014-11-24 10:45:28