24 lines
586 B
Bash
Executable File
24 lines
586 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Usage: is_vim.sh <tty>
|
|
# tty: Specify tty to check for vim process.
|
|
tty=$1
|
|
|
|
# Construct process tree.
|
|
children=()
|
|
pids=($(ps -o pid= -t $tty))
|
|
|
|
while read -r pid ppid; do
|
|
[[ -n $pid && $pid -ne $ppid ]] && children[ppid]+=" $pid"
|
|
done <<<"$(ps -Ao pid=,ppid=)"
|
|
|
|
# Get all descendant pids of processes in $tty with BFS
|
|
idx=0
|
|
while ((${#pids[@]} > idx)); do
|
|
pid=${pids[idx++]}
|
|
pids+=(${children[pid]-})
|
|
done
|
|
|
|
# Check whether any child pids are vim
|
|
ps -o state=,comm= -p "${pids[@]}" | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'
|
|
exit $?
|