Skip to content
Back to skills

369 Process Management 2a183406

ASecurity

This document provides strategies for managing QEMU processes, especially in environments where standard tools may be unavailable.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
toolsshellbash

Works with

  • terminal

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 369-process_management_2a183406 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 369 Process Management 2a183406?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 369 Process Management 2a183406
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-369-process-management-2a183406/badge)](https://www.skillsdirectory.com/skills/tools-only-369-process-management-2a183406)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Process Management for QEMU in Limited Environments

This document provides strategies for managing QEMU processes, especially in environments where standard tools may be unavailable.

## Understanding Process Hierarchy

### Backgrounded Processes

When a process is started with `&`:

```bash
qemu-system-x86_64 ... &
```

The process becomes a child of the shell initially, but if the shell exits, the process is reparented to PID 1 (init/systemd).

**Key Insight**: Using a tool to kill a shell session does NOT automatically kill backgrounded children. The QEMU process continues running independently.

### Process Groups

Processes started in the same shell share a process group ID (PGID). This can be used for group termination if tools are available:

```bash
kill -- -PGID  # Kill entire process group
```

## Process Discovery Methods

### Method 1: Standard Tools (When Available)

```bash
# Using ps
ps aux | grep qemu

# Using pgrep
pgrep -a qemu

# Find process using specific port
lsof -i :6665
ss -tlnp | grep 6665
netstat -tlnp | grep 6665
```

### Method 2: /proc Filesystem (Always Available on Linux)

When `ps`, `pgrep`, etc. are unavailable, use `/proc` directly:

#### Find All QEMU Processes

```bash
for pid in /proc/[0-9]*; do
  cmdline="$pid/cmdline"
  if [ -f "$cmdline" ] && grep -q qemu "$cmdline" 2>/dev/null; then
    echo "PID: $(basename $pid)"
    cat "$cmdline" | tr '\0' ' '
    echo
  fi
done
```

#### Find Process by Port

```bash
# Check /proc/net/tcp for port bindings
# Port 6665 in hex is 0x1A09
grep -i "1A09" /proc/net/tcp
```

#### Get Process Information

```bash
PID=12345

# Command line
cat /proc/$PID/cmdline | tr '\0' ' '

# Working directory
readlink /proc/$PID/cwd

# Executable path
readlink /proc/$PID/exe

# File descriptors (including sockets)
ls -la /proc/$PID/fd/
```

### Method 3: Using /proc/*/comm

The `comm` file contains the process name (first 15 characters):

```bash
for pid in /proc/[0-9]*; do
  if grep -q "qemu" "$pid/comm" 2>/dev/null; then
    echo "Found: $(basename $pid) - $(cat $pid/comm)"
  fi
done
```

## Process Termination Methods

### Method 1: kill Command

```bash
kill PID         # SIGTERM (graceful)
kill -9 PID      # SIGKILL (force)
kill -TERM PID   # Explicit SIGTERM
```

### Method 2: pkill/killall (When Available)

```bash
pkill qemu
pkill -f "qemu.*6665"  # Match command line pattern
killall qemu-system-x86_64
```

### Method 3: QEMU Monitor

If QEMU monitor is accessible:

```bash
# Via telnet to monitor port
echo "quit" | nc localhost MONITOR_PORT

# Or interactively
telnet localhost MONITOR_PORT
# Then type: quit
```

### Method 4: Process Signal via /proc

On some systems, writing to `/proc/PID/` is restricted, but reading allows discovery. Use `kill` command with discovered PID.

## Port Conflict Resolution

### Identifying Port Usage

```bash
# Multiple approaches - use what's available:

# netstat
netstat -tuln | grep PORT

# ss
ss -tuln | grep PORT

# lsof
lsof -i :PORT

# nc (netcat) probe
nc -z 127.0.0.1 PORT && echo "In use" || echo "Free"

# /proc/net/tcp (PORT must be converted to hex)
# Example: Port 6665 = 0x1A09
cat /proc/net/tcp | grep -i "1A09"
```

### Releasing a Port

1. Identify the process holding the port
2. Terminate that process
3. Wait briefly (1-2 seconds) for kernel to release the port
4. Verify port is free before restarting

```bash
# Example sequence
PID=$(lsof -t -i :6665)  # Get PID
kill $PID                 # Terminate
sleep 2                   # Wait for release
nc -z 127.0.0.1 6665 || echo "Port now free"
```

## Verification Strategies

### Verify Process is Running

```bash
# Check if PID exists
[ -d /proc/$PID ] && echo "Running" || echo "Not running"

# Check if process is still qemu
grep -q qemu /proc/$PID/cmdline 2>/dev/null && echo "QEMU running"
```

### Verify Correct Process Owns Port

```bash
# Get PID from port
PORT_PID=$(lsof -t -i :6665)

# Verify it's QEMU
cat /proc/$PORT_PID/cmdline | grep -q qemu && echo "QEMU owns port"
```

### Verify Process Responds

```bash
# Test telnet connection
timeout 3 bash -c "echo '' | nc 127.0.0.1 6665" && echo "Responding"
```

## Common Pitfalls

### Pitfall 1: Assuming Shell Kill Stops QEMU

**Wrong assumption**: Killing a shell/terminal session stops all processes started from it.

**Reality**: Backgrounded processes (`&`) continue running after shell death.

**Solution**: Explicitly track and terminate QEMU processes by PID.

### Pitfall 2: Not Waiting for Port Release

**Problem**: Starting new QEMU immediately after killing old one causes "Address in use" error.

**Solution**: Wait 1-2 seconds and verify port is free before restart.

### Pitfall 3: Multiple QEMU Instances

**Problem**: Multiple QEMU processes from failed attempts, unclear which is serving.

**Solution**: Before starting, enumerate all existing QEMU processes and terminate them cleanly.

### Pitfall 4: Relying on Unavailable Tools

**Problem**: Scripting with `ps`, `pkill`, etc. that aren't installed.

**Solution**: Check tool availability first; have `/proc` fallback ready.

## Best Practices

1. **Record PIDs**: When starting QEMU, capture and record its PID
   ```bash
   qemu-system-x86_64 ... &
   QEMU_PID=$!
   echo "QEMU started with PID: $QEMU_PID"
   ```

2. **Clean State Before Start**: Always check for and terminate existing instances before starting new ones

3. **Verify After Actions**: After starting or stopping, verify the expected state

4. **Document Running Processes**: Keep track of what's running for later management

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…