`pgrep` inkompatibel zu '_' ? [Gelöst]

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

`pgrep` inkompatibel zu '_' ? [Gelöst]

Beitrag von jmar83 » 14.11.2019 17:15:06

Code: Alles auswählen

user1@debian-x-dev:/opt/x$ ps -aux | grep pf
root      1838  0.0  0.1 173240 13296 ?        Ss   17:07   0:00 ./pf_master
root      1949  0.1  0.1 168376  9476 ?        Ss   17:07   0:00 ./pf_state
user1     2288  0.0  0.0  12784  1008 pts/0    S+   17:11   0:00 grep pf
user1@debian-x-dev:/opt/x$
user1@debian-x-dev:/opt/x$ pgrep pf
1838
1949
user1@debian-x-dev:/opt/x$ pgrep pf_master
user1@debian-x-dev:/opt/x$ pgrep pf_state
...warum zeigt mir `pgrep` die Sachen nur an, wenn ich bis zum Präfix (also VOR dem '_') eingebe, und dann nicht mehr? Passt irgendwie gar nicht zu dem, was `ps -aux | grep pf` ausgibt?

Danke für die Feedbacks.
Zuletzt geändert von jmar83 am 09.12.2019 16:27:46, insgesamt 4-mal geändert.
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von jmar83 » 14.11.2019 17:17:53

Muss mich korrigieren: Wenn ich `pgrep pf_` eingebe, dann wird mir noch was angezeigt. Später nicht mehr..
Freundliche Grüsse, Jan

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von Meillo » 14.11.2019 21:14:48

Ich kann das Problem (zumindest auf meinem System) nicht nachvollziehen:

Code: Alles auswählen

B-) pgrep -l _         
277 sync_supers
379 ata_sff
591 fsnotify_mark
758 scsi_eh_0
761 scsi_eh_1
5853 wpa_supplicant

B-) pgrep -l scsi_
758 scsi_eh_0
761 scsi_eh_1

B-) pgrep -l scsi_eh
758 scsi_eh_0
761 scsi_eh_1

Funktionieren diese Befehle:
- pgrep -l master
- pgrep -l _master
- pgrep -l _
?

Hast du die Kommandozeile komplett frisch eingegeben (ohne Vertipper). Ich hatte bei sowas schon mal Probleme mit irgendwelchem Datenmuell in der Kommandozeile.
Use ed once in a while!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von JTH » 14.11.2019 22:00:49

Meillo hat geschrieben: ↑ zum Beitrag ↑
14.11.2019 21:14:48
Ich kann das Problem (zumindest auf meinem System) nicht nachvollziehen:
Was ähnliches wollt ich auch grad posten :D

Aber auf den zweiten Gedanken: pgrep sucht normalerweise nach dem Namen eines Prozesses, nicht nach dem Namen des Kommandos, das du aufgerufen hast. Ein Prozess kann sich aber umbenennen, kann dann anders heißen, als das Kommando, das aufgerufen wurde.

Als Abhilfe:

Code: Alles auswählen

$ pgrep -f pf_
$ pgrep -f pf_master
$ pgrep -f pf_slave
Mit -f sucht pgrep in der kompletten Kommandozeile der laufenden Prozesse, nicht nur in den Namen.

Zum Nachgucken, ob die Kommandos sich umbenennen:

Code: Alles auswählen

$ for cmd in pf_master pf_state; do for pid in $(pgrep -f "$cmd"); do echo -n "# "; cat /proc/${pid}/cmdline; echo; awk '/(^Name)|(^Pid)/ { print $0; }' /proc/${pid}/status; done; done
Manchmal bekannt als Just (another) Terminal Hacker.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von jmar83 » 15.11.2019 09:05:40

Also wenn man ein executable-File mit dem Namen ABC hat, so muss dieses nicht zwangsläufig als "ABC" in der Prozessliste sein? Es kann also so programmiert werden, dass sich der Prozessname über die Programmierung manipulieren lässt? Habe ich das so richtig verstanden?
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von jmar83 » 15.11.2019 09:10:53

@JTH: Aushabe des von dir vorgeschlagenen Skripts:

Code: Alles auswählen

user1@debian-x-dev:~$ ./test.sh
./test.sh: Zeile 2: Syntaxfehler beim unerwarteten Wort `do'
./test.sh: Zeile 2: `$ for cmd in pf_master pf_state; do for pid in $(pgrep -f "$cmd"); do echo -n "# "; cat /proc/${pid}/cmdline; echo; awk '/(^Name)|(^Pid)/ { print $0; }' /proc/${pid}/status; done; done'

Irgendwas scheint damit nicht zu stimmen..?
Freundliche Grüsse, Jan

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von JTH » 15.11.2019 09:23:18

Das $ am Anfang soll signalisieren, dass du es direkt in ein Terminal kopieren kannst. Wenn du es in ein Skript schreibst, muss das $ weg.

Nachtrag:
jmar83 hat geschrieben: ↑ zum Beitrag ↑
15.11.2019 09:05:40
Also wenn man ein executable-File mit dem Namen ABC hat, so muss dieses nicht zwangsläufig als "ABC" in der Prozessliste sein? Es kann also so programmiert werden, dass sich der Prozessname über die Programmierung manipulieren lässt?
Genau.

Mein Skriptgewurschtel oben wäre mit ps vllt auch kürzer möglich gewesen :|
Manchmal bekannt als Just (another) Terminal Hacker.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von jmar83 » 15.11.2019 09:43:39

Geht irgendwie auch nicht, das ist das was ich zuerst ausprobiert habe, direkt an der Konsole:

Code: Alles auswählen

user1@debian-x-dev:~$ $ for cmd in pf_master pf_state; do for pid in $(pgrep -f "$cmd"); do echo -n "# "; cat /proc/${pid}/cmdline; echo; awk '/(^Name)|(^Pid)/ { print $0; }' /proc/${pid}/status; done; done
-bash: Syntaxfehler beim unerwarteten Wort `do'
user1@debian-x-dev:~$
Genau.
Vielen Dank!! :-)
Freundliche Grüsse, Jan

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von JTH » 15.11.2019 10:37:47

jmar83 hat geschrieben: ↑ zum Beitrag ↑
15.11.2019 09:43:39
Geht irgendwie auch nicht, das ist das was ich zuerst ausprobiert habe, direkt an der Konsole:
Auch da musst du das $ am Anfang des Kopierten, vor dem ersten for, weglassen:

Code: Alles auswählen

user1@debian-x-dev:~$ for cmd in pf_master pf_state; do for pid in $(pgrep -f "$cmd"); do echo -n "# "; cat /proc/${pid}/cmdline; echo; awk '/(^Name)|(^Pid)/ { print $0; }' /proc/${pid}/status; done; done
[…]
user1@debian-x-dev:~$

Wenn du einmal hinguckst, hat dein Bash-Prompt am Ende ein $:

Code: Alles auswählen

user1@debian-x-dev:~$ 
Deshalb wird das gern bei Beispielen mal als Hinweis genommen, wie und wo man nen Skriptschnipsel ausführen sollte. Hat diesmal anscheinend nicht funktioniert :wink:
Manchmal bekannt als Just (another) Terminal Hacker.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: `pgrep` inkompatibel zu '_' ?

Beitrag von jmar83 » 15.11.2019 12:15:23

OK danke!! ;-)
Freundliche Grüsse, Jan

Antworten