Sida 1 av 2

linux pipe

Postat: 19 mars 2020, 11:42:17
av Oltronix
Jag har ett script mot ett webhotell (one.com) som slutat fungera utan jag ändrat i scriptet. Det jag vill göra som ett 1:a steg är att ta bort alla hängande processer med nått som:

Kod: Markera allt

pi@mumin1 ~ $ ps -ax| grep send| cut -c 1-5 | kill -9
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
warning: bad ps syntax, perhaps a bogus '-'?
See http://gitorious.org/procps/procps/blobs/master/Documentation/FAQ
pi@mumin1 ~ $ 

men det fungerar inte.

Följande processer vill jag ta bort:

Kod: Markera allt

pi@mumin1 ~ $ ps -ax|grep send
warning: bad ps syntax, perhaps a bogus '-'?
See http://gitorious.org/procps/procps/blobs/master/Documentation/FAQ
2677 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
 5180 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
 7620 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
10046 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
12473 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
17348 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
19778 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
22218 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
24656 ?        S      0:00 /bin/bash /home/pi/send-to-one.sh
26140 pts/0    S+     0:00 grep --color=auto send
pi@mumin1 ~ $ 

pi@mumin1 ~ $ ps -ax|grep ftp
warning: bad ps syntax, perhaps a bogus '-'?
See http://gitorious.org/procps/procps/blobs/master/Documentation/FAQ
 2370 ?        Ssl    0:06 /usr/bin/owftpd -c /etc/owfs.conf --pid-file /var/run/owfs/owftpd.pid
 3356 ?        S      0:00 ftp -n -i
 5789 ?        S      0:00 ftp -n -i
 8220 ?        S      0:00 ftp -n -i
10658 ?        S      0:00 ftp -n -i
13094 ?        S      0:00 ftp -n -i
17965 ?        S      0:00 ftp -n -i
18232 pts/1    S+     0:00 man ftp
20397 ?        S      0:00 ftp -n -i
22828 ?        S      0:00 ftp -n -i
25266 ?        S      0:00 ftp -n -i
27312 ?        S      0:00 ftp -n -i
27703 ?        S      0:00 ftp -n -i
27992 pts/0    S+     0:00 grep --color=auto ftp
pi@mumin1 ~ $ 
Hur gör jag för att ta bort processerna?

Re: linux pipe

Postat: 19 mars 2020, 11:53:09
av ahlsten

Re: linux pipe

Postat: 19 mars 2020, 12:14:01
av Oltronix
pgrep var en ny bekantskap och enklare än mitt försök. Dock har jag fortfarande problem med argument till kill kommandot

Kod: Markera allt

pi@mumin1 ~ $ pgrep -u pi send| kill -9
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Edit:
Mittåt:
pkill verkar fungera :)

Tack!

Re: linux pipe

Postat: 19 mars 2020, 16:46:41
av guckrum
Varje gång du skriver "ps -ax" så får du ett felmeddelande. Din ps tar inte sådana argument, prova "man ps" och gör rätt. (Antagligen "ps ax".)

xargs är världens grej annars om du vill köra ett kommando med parametrar från en pipe: "... | xargs kill -9". I min "man kill" (Linux) står det ingenstans att kill tar processid från stdin. Vilket OS?

Re: linux pipe

Postat: 19 mars 2020, 16:49:23
av guckrum
...och ta det lugnt med pkill, den dödar allt som matchar!

Re: linux pipe

Postat: 19 mars 2020, 18:59:06
av Oltronix
Tja jag är uppväxt med Berkley unix 4.2. Där var det ps -ax. Jag vet att det är fel men det sitter i ryggmägren, och fungerar fortfarande dock med lite gnäll från OSet

Hos mig är processid i kill argumentet
  • KILL(1) User Commands KILL(1)

    NAME
    kill - send a signal to a process

    SYNOPSIS
    kill [options] <pid> [...]

Kod: Markera allt

pi@mumin1 ~ $ uname -a
Linux mumin1 4.1.7-v7+ #817 SMP PREEMPT Sat Sep 19 15:32:00 BST 2015 armv7l GNU/Linux

Re: linux pipe

Postat: 19 mars 2020, 19:35:42
av guckrum
:)

Precis, så antingen använder du xargs som jag beskrev ovan, eller så gör du något shelligt, typ stoppar in din pipe i backticks som arg till kill, eller använd $(...), lite beroende på shell och smak. Finns säkert fler sätt.

Re: linux pipe

Postat: 20 mars 2020, 10:59:14
av Oltronix
Nu har jag kört xargs enligt nedan:

Kod: Markera allt

pi@mumin1 ~ $ ps ax| grep send| cut -c 1-5| xargs kill -9
kanske inte så vackert med det fungerar. Men framför allt jag har förstått att de inte alltid fungerar att ge argument via pipe.

Och till ytter mera visso; Jag har en annan pipe där jag försökte döpa om massa filer till något annat. Filerna ser ut som;
CD-1/song1
CD-1/song2
CD-1/song3
etc

Nu kanske jag kan få det att fungera!

Jag bugar och tackar för nyvunnen kunskap. Tack!! :)

Ps
jag får återkomma med mitt skumma problem med webhotell och ftp

Re: linux pipe

Postat: 20 mars 2020, 11:37:02
av Mr Andersson
Men framför allt jag har förstått att de inte alltid fungerar att ge argument via pipe.
Tekniskt sett fungerar det aldrig att ge argument via pipe. :wink:
Pipes skickar data till stdin hos mottagaren, inte via argument.
Det är just det som xargs är bra för, det "konverterar" från stdin till kommandoargument.

Re: linux pipe

Postat: 20 mars 2020, 12:12:33
av ojz0r
pkill -9 <3

Re: linux pipe

Postat: 27 mars 2020, 19:33:48
av maDa
Du verkar använda ftp en del i skript. Jag rekommenderar att du kikar på lftp som klarar betydligt mer trick och fungerar bättre för automatiska grejor.

Själv använder jag killall när jag ska döda flera processer.

Re: linux pipe

Postat: 27 mars 2020, 19:39:20
av hawkan
Det är ju "ps -ax" som är problemet. Använd sysv syntax "ps -efl" så ska det väl gå bra.
killall är annars rätt.

Edit, aah. Så här ska du nog göra

Kod: Markera allt

kill -9 `ps -efl | grep send | cut -c 1-5`

Re: linux pipe

Postat: 28 mars 2020, 19:49:21
av Glenn
killall vill man dock INTE använda på en riktig UNIX, för då får man vad man ber om.

..Klassiker när nån linuxmänniska sätter sej vid tex en solarismaskin..

Det gör också att jag aldrig använder killall eftersom det är för lätt att göra fel, precis som att jag av princip undviker fördummande alias.
("alias rm = 'rm -i'" är ett typexempel.)

Re: linux pipe

Postat: 28 mars 2020, 22:19:04
av mankan
Är inte med på vad du menar, killall på linux slår bara ihjäl dina processer inte andras. Utveckla gärna.

Re: linux pipe

Postat: 28 mars 2020, 22:58:05
av Glenn
På de flesta "riktiga" UNIX'ar (SysV) så gör killall som det låter, dödar ALLA processer, om man då är root så tar man ner systemet lite osnyggt, är man vanlig user så dödas allt man startat inklusive ens loginskal. vanligen är det inte vad man ville oavsett.

På linux/BSD fungerar det inte så utan killall är en form av kill fast den tar processnamn istället för pid.

Kör man då blandade system så är det en dålig vana att använda killall då det bara är en tidsfråga innan man gör fel.

Man kan då köra pkill, men vanligen föredrar jag att hitta pid och skicka signaler till den istället.