diff --git a/cmd/arc_summary/arc_summary.py b/cmd/arc_summary/arc_summary.py index 2472f87ead..f6dbb9bfbc 100755 --- a/cmd/arc_summary/arc_summary.py +++ b/cmd/arc_summary/arc_summary.py @@ -47,6 +47,7 @@ import getopt import os import sys import time +import errno from subprocess import Popen, PIPE from decimal import Decimal as D @@ -55,6 +56,18 @@ show_tunable_descriptions = False alternate_tunable_layout = False +def handle_Exception(ex_cls, ex, tb): + if ex is IOError: + if ex.errno == errno.EPIPE: + sys.exit() + + if ex is KeyboardInterrupt: + sys.exit() + + +sys.excepthook = handle_Exception + + def get_Kstat(): """Collect information on the ZFS subsystem from the /proc virtual file system. The name "kstat" is a holdover from the Solaris utility diff --git a/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh b/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh index 67c11c8ab6..6653b9c1ad 100755 --- a/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh +++ b/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh @@ -37,4 +37,7 @@ while [[ $i -lt ${#args[*]} ]]; do ((i = i + 1)) done +log_must eval "arc_summary.py | head > /dev/null" +log_must eval "arc_summary.py | head -1 > /dev/null" + log_pass "arc_summary.py generates output and doesn't return an error code"