From e87419808d7f4aa5e15b943ed4d3e1f35a5a7b0b Mon Sep 17 00:00:00 2001 From: Tomasz Grzegowski Date: Tue, 21 Jan 2025 15:19:00 +0000 Subject: [PATCH] Send kill SIGSEGV if specified --- nat-lab/bin/kill_process_by_natlab_id | 16 +++++++++++----- nat-lab/tests/utils/tcpdump.py | 5 +++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/nat-lab/bin/kill_process_by_natlab_id b/nat-lab/bin/kill_process_by_natlab_id index 2922c2db9..5d835edf6 100644 --- a/nat-lab/bin/kill_process_by_natlab_id +++ b/nat-lab/bin/kill_process_by_natlab_id @@ -1,20 +1,26 @@ #!/usr/bin/env bash -if [[ "$#" -ne 1 ]]; then - echo "Wrong number of parameters" +if [[ "$#" -lt 1 || "$#" -gt 2 ]]; then + echo "Usage: $0 [--SEGV]" exit 1 fi NATLAB_ID=$1 +SIGNAL="-TERM" # default SIGTERM + +# If the second argument is '--SEGV', send SIGSEGV (-11) to create a coredump +if [[ "$2" == "--SEGV" ]]; then + SIGNAL="-SEGV" +fi for pid in $(ps -e -o pid=); do if grep --null-data --text KILL_ID=${NATLAB_ID} /proc/${pid}/environ; then cmd=$(tr -d '\000' < /proc/${pid}/cmdline || echo "N/A") - echo "$(date) Killing ${pid} ${cmd}" - kill "${pid}" + echo "$(date) Killing ${pid} ${cmd} with signal: $SIGNAL" + kill "${SIGNAL}" "${pid}" wait "${pid}" 2>/dev/null exit 0 fi done -echo "The process to kill not found" +echo "The process to kill was not found: $NATLAB_ID" diff --git a/nat-lab/tests/utils/tcpdump.py b/nat-lab/tests/utils/tcpdump.py index d40059ee6..2af7c7618 100644 --- a/nat-lab/tests/utils/tcpdump.py +++ b/nat-lab/tests/utils/tcpdump.py @@ -3,6 +3,7 @@ from asyncio import Event, wait_for, sleep from config import WINDUMP_BINARY_WINDOWS from contextlib import asynccontextmanager, AsyncExitStack +from datetime import datetime from typing import AsyncIterator, Optional from utils.connection import TargetOS, Connection from utils.output_notifier import OutputNotifier @@ -137,11 +138,11 @@ async def run(self) -> AsyncIterator["TcpDump"]: try: await wait_for(self.start_event.wait(), 0) except TimeoutError as e: - print("tcpdump timed out, killing it to create a coredump 🗡️") + print(datetime.now() ,"tcpdump timed out, killing it to create a coredump 🗡️") if self.connection.target_os != TargetOS.Windows: if self.kill_id: await self.connection.create_process( - ["kill", "-11", str(self.kill_id)] + ["/opt/bin/kill_process_by_natlab_id", str(self.kill_id), "--SEGV"] ).execute() else: await self.connection.create_process(