Hello,
On Fri, 05 Feb 2021, Walter Dnes wrote:
>On Fri, Feb 05, 2021 at 06:55:12AM -0500, Rich Freeman wrote
>> On Fri, Feb 5, 2021 at 2:45 AM Walter Dnes <[email protected]> wrote:
>> > So far, so good, but running "ps -ef | grep whatever" and then
>> > typing the kill -SIGSTOP/SIGCONT command on the correct pid is grunt
>> > work, subject to typos.
It's much easier to use the '-o' option of ps, i.e.:
$ ps -eo pid,cmd
That gives you a much easier format to work with. There's a lot more
fields to use, e.g. tname or tty, args or cmd, comm, and many more see
'man ps' under "STANDARD FORMAT SPECIFIERS".
> My reading of the "killall" man page is that it works on command
>names. For my script, "pstop palemoon" stops all instances of Pale
>Moon. But my script greps the entire line, so "pstop slashdot" will
>stop the process...
>
>/home/waltdnes/pm/palemoon/palemoon -new-instance -p slasdot
>
> Does "killall" have that ability to stop a process based on any
>parameters in the command line?
The following script does:
==== ~/bin/pstop && ln -s pstop ~/bin/pcont ====
#!/usr/bin/gawk -f
BEGINFILE { if( FILENAME != "" ) { exit(0); } }
BEGIN {
### determine if were run as pstop or pcont
cmdlinefile = "/proc/" PROCINFO["pid"] "/cmdline" ;
getline cmdline < cmdlinefile;
n = split(cmdline, argv, "\0");
IAM=argv[3];
if( IAM ~ /pstop$/) { SIG="STOP"; } else { SIG="CONT"; };
### now to work ...
printf("%s-ing pids: ", SIG);
bcmd = sprintf("kill -%s ", SIG);
pscmd = "ps -eo pid,cmd";
# IGNORECASE=1 ### uncomment for case insensitive matching
while ( pscmd | getline ) {
if( $1 != PROCINFO["pid"] ) { ### ignore ourself
p = $1; $1 = ""; ### save pid to p; prune pid from $0
for(i=1; i < (ARGC); i++) {
if( $0 ~ ARGV[i] ) {
printf("%s ", p);
cmd = bcmd p;
system(cmd);
}
}
}
}
}
END { printf("\n"); }
====
Arguments can be any number of (quoted where neccessary) regular
expressions described under 'Regular Expressions' in 'man gawk'
(basically Extended POSIX REs as in egrep, see 'man 7 regex').
Example use:
$ pstop palemoon firefox slashdot 'chrom(e|ium)'
(and the same for pcont)
HTH,
-dnh
--
Love your enemies: they'll go crazy trying to figure out what you're up
to. -- BSD fortune file