Skip to content

Commit

Permalink
Tools: properly handle the keyboard interrupt (iovisor#2083)
Browse files Browse the repository at this point in the history
Many tools rely on the user to type Ctrl-C to end, but don't actually
catch the keyboard interrupt and thus show an ugly backtrace when it
happens. Let's catch the interrupt.
  • Loading branch information
jeromemarchand authored and yonghong-song committed Dec 19, 2018
1 parent c22ec6d commit 5167127
Show file tree
Hide file tree
Showing 40 changed files with 160 additions and 39 deletions.
5 changes: 4 additions & 1 deletion tools/bashreadline.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,7 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/biosnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,4 +187,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/btrfsslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,4 +352,7 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/capable.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,4 +216,7 @@ def print_event(bpf, cpu, data, size):
callback = partial(print_event, b)
b["events"].open_perf_buffer(callback)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/criticalstat.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,4 +328,7 @@ def print_event(cpu, data, size):
('preempt' if preemptoff else 'IRQ'), args.duration))

while 1:
b.perf_buffer_poll();
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/dbslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,4 +230,7 @@ def print_event(cpu, data, size):

bpf["events"].open_perf_buffer(print_event, page_cnt=64)
while True:
bpf.perf_buffer_poll()
try:
bpf.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/dcsnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,7 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/execsnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,4 +246,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/ext4slower.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,4 +356,7 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/filelife.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,7 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/fileslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,4 +250,7 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/funcslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,4 +330,7 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while True:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/gethostlatency.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/inject.py
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,10 @@ def _generate_program(self):

def _main_loop(self):
while True:
self.bpf.perf_buffer_poll()
try:
self.bpf.perf_buffer_poll()
except KeyboardInterrupt:
exit()

def run(self):
self._create_probes()
Expand Down
5 changes: 4 additions & 1 deletion tools/killsnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,4 +145,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/lib/uflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,7 @@ def print_event(cpu, data, size):

bpf["calls"].open_perf_buffer(print_event)
while 1:
bpf.perf_buffer_poll()
try:
bpf.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/lib/ugc.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,4 +244,7 @@ def print_event(cpu, data, size):

bpf["gcs"].open_perf_buffer(print_event)
while 1:
bpf.perf_buffer_poll()
try:
bpf.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/lib/uthreads.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,7 @@ def print_event(cpu, data, size):

bpf["threads"].open_perf_buffer(print_event)
while 1:
bpf.perf_buffer_poll()
try:
bpf.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/mdflush.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,7 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
6 changes: 5 additions & 1 deletion tools/mountsnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,11 @@ def main():
print('{:16} {:<7} {:<7} {:<11} {}'.format(
'COMM', 'PID', 'TID', 'MNT_NS', 'CALL'))
while True:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()



if __name__ == '__main__':
Expand Down
5 changes: 4 additions & 1 deletion tools/mysqld_qslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
3 changes: 3 additions & 0 deletions tools/nfsslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,4 +325,7 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/oomkill.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,7 @@ def print_event(cpu, data, size):
print("Tracing OOM kills... Ctrl-C to stop.")
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/opensnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,4 +191,7 @@ def print_event(cpu, data, size):
b["events"].open_perf_buffer(print_event, page_cnt=64)
start_time = datetime.now()
while not args.duration or datetime.now() - start_time < args.duration:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/runqslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,4 +254,7 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/solisten.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,7 @@ def print_event(cpu, data, size):

# Read events
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/sslsniff.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,4 +228,7 @@ def print_event(cpu, data, size, rw):
b["perf_SSL_write"].open_perf_buffer(print_event_write)
b["perf_SSL_read"].open_perf_buffer(print_event_read)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/statsnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/syncsnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcpaccept.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,4 +270,7 @@ def print_ipv6_event(cpu, data, size):
b["ipv4_events"].open_perf_buffer(print_ipv4_event)
b["ipv6_events"].open_perf_buffer(print_ipv6_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcpconnect.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,4 +237,7 @@ def print_ipv6_event(cpu, data, size):
b["ipv4_events"].open_perf_buffer(print_ipv4_event)
b["ipv6_events"].open_perf_buffer(print_ipv6_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcpconnlat.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,4 +264,7 @@ def print_ipv6_event(cpu, data, size):
b["ipv4_events"].open_perf_buffer(print_ipv4_event)
b["ipv6_events"].open_perf_buffer(print_ipv6_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcpdrop.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,7 @@ def print_ipv6_event(cpu, data, size):
b["ipv4_events"].open_perf_buffer(print_ipv4_event)
b["ipv6_events"].open_perf_buffer(print_ipv6_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcplife.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,4 +506,7 @@ def print_ipv6_event(cpu, data, size):
b["ipv4_events"].open_perf_buffer(print_ipv4_event, page_cnt=64)
b["ipv6_events"].open_perf_buffer(print_ipv6_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcpretrans.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,4 +303,7 @@ def depict_cnt(counts_tab, l3prot='ipv4'):
b["ipv4_events"].open_perf_buffer(print_ipv4_event)
b["ipv6_events"].open_perf_buffer(print_ipv6_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcpstates.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,4 +386,7 @@ def print_ipv6_event(cpu, data, size):
b["ipv4_events"].open_perf_buffer(print_ipv4_event, page_cnt=64)
b["ipv6_events"].open_perf_buffer(print_ipv6_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/tcptracer.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,4 +662,7 @@ def inet_ntoa(addr):
b["tcp_ipv4_event"].open_perf_buffer(print_ipv4_event)
b["tcp_ipv6_event"].open_perf_buffer(print_ipv6_event)
while True:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/ttysnoop.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/xfsslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,4 +303,7 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
5 changes: 4 additions & 1 deletion tools/zfsslower.py
Original file line number Diff line number Diff line change
Expand Up @@ -315,4 +315,7 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.perf_buffer_poll()
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()

0 comments on commit 5167127

Please sign in to comment.