2010-01-25 13 views
5

Mam problem podczas wykonywania skryptu bash z C++ za pomocą polecenia systemowego. Skrypt przechwytuje sygnał SIGPIPE i kończy z kodem powrotu 141.Czy zaleca się pułapkę SIGPIPE w skrypcie Bash?

Ten problem zaczął pojawiać się tylko w ostatniej wersji mojego kodu.

Moje pytania są następujące:

  1. Dlaczego ta SIGPIPE nastąpić teraz, a nie wystąpiły wcześniej?
  2. Czy można bezpiecznie ignorować SIGPIPE i jakie są tego konsekwencje?
+0

Czy możesz opublikować kilka istotnych fragmentów kodu? – tur1ng

+0

Jak wyjaśniono w odpowiedziach, gdzieś jest pęknięta rura, a więc sygnał 'SIPIPE'. Oznacza to, że coś jest nie tak w używaniu logiki. Nie powinieneś tego ignorować. –

Odpowiedz

3

1) Trudno jest odpowiedzieć, nie wiedząc dokładnie, co się zmieniło.
2) Jeśli sekwencja poleceń pojawia się w potoku, a jedno z poleceń odczytu kończy się, zanim program piszący zakończy pracę, program piszący odbierze sygnał SIGPIPE. To, czy możesz zignorować, zależy od tego, czy jest to dopuszczalne zachowanie skryptu. Więcej informacji here

2

current version of the FAQ że PiedPiper związana stanów:

dzień bash-3.1, bash nie zgłasza błędów SIGPIPE domyślnie. You może zbudować wersję bash, która zgłosi takie błędy.

Czy to możliwe, że zmieniłeś wersje Bash lub sposób, w jaki został zbudowany i które spowodowały zmianę zachowania w twoim kodzie?

Powiązane problemy