@@ -293,6 +293,29 @@ sub _getProcessesBusybox {
293
293
return @processes ;
294
294
}
295
295
296
+ my $qrProcessWithNameSpace = qr / ^ \s *
297
+ (\S +) \s +
298
+ (\S +) \s +
299
+ (\S +) \s +
300
+ (\S +) \s +
301
+ (\S +) \s +
302
+ (\S +) \s +
303
+ (\S +) \s +
304
+ (\S +) \s +
305
+ (\S .*\S )
306
+ / x ;
307
+
308
+ my $qrProcessWithoutNameSpace = qr / ^ \s *
309
+ (\S +) \s +
310
+ (\S +) \s +
311
+ (\S +) \s +
312
+ (\S +) \s +
313
+ (\S +) \s +
314
+ (\S +) \s +
315
+ (\S +) \s +
316
+ (\S .*\S )
317
+ / x ;
318
+
296
319
sub _getProcessesOther {
297
320
my (%params ) = (
298
321
command =>
@@ -301,6 +324,29 @@ sub _getProcessesOther {
301
324
@_
302
325
);
303
326
327
+ # Support a parameter to only keep processes from the same namespace
328
+ # Useful to exclude processes from docker or lxc containers on linux
329
+ my $sameNameSpace = delete $params {namespace } // " " ;
330
+ if (OSNAME eq " solaris" ) {
331
+ $sameNameSpace = 0;
332
+ } elsif ($sameNameSpace && $sameNameSpace eq " same" ) {
333
+ # Extract namespace number from the system first process
334
+ $sameNameSpace = getFirstLine(command => " ps --no-headers -o cgroupns 1" , logger => $params {logger });
335
+ if ($sameNameSpace && $sameNameSpace =~ / ^\d +$ / ) {
336
+ $sameNameSpace = int ($sameNameSpace );
337
+ $params {command } = " ps -A -o user,pid,pcpu,pmem,vsz,tty,etime,cgroupns,command" ;
338
+ } else {
339
+ $sameNameSpace = 0;
340
+ }
341
+ } else {
342
+ $sameNameSpace = 0;
343
+ }
344
+
345
+ my $filter = delete $params {filter };
346
+ $filter = 0 unless ref ($filter ) eq " Regexp" ;
347
+
348
+ my $qrLine = $sameNameSpace ? $qrProcessWithNameSpace : $qrProcessWithoutNameSpace ;
349
+
304
350
my @lines = getAllLines(%params )
305
351
or return ;
306
352
@@ -314,17 +360,7 @@ sub _getProcessesOther {
314
360
315
361
foreach my $line (@lines ) {
316
362
317
- next unless $line =~
318
- / ^ \s *
319
- (\S +) \s +
320
- (\S +) \s +
321
- (\S +) \s +
322
- (\S +) \s +
323
- (\S +) \s +
324
- (\S +) \s +
325
- (\S +) \s +
326
- (\S .*\S )
327
- /x ;
363
+ next unless $line =~ $qrLine ;
328
364
329
365
my $user = $1 ;
330
366
my $pid = $2 ;
@@ -333,7 +369,12 @@ sub _getProcessesOther {
333
369
my $vsz = $5 ;
334
370
my $tty = $6 ;
335
371
my $etime = $7 ;
336
- my $cmd = $8 ;
372
+ my $ns = $sameNameSpace ? $8 : 0;
373
+ my $cmd = $sameNameSpace ? $9 : $8 ;
374
+
375
+ next if $sameNameSpace && $ns && $ns =~ / ^\d +$ / && int ($ns ) != $sameNameSpace ;
376
+
377
+ next if $filter && $cmd !~ $filter ;
337
378
338
379
push @processes , {
339
380
USER => $user ,
0 commit comments