Vinnaren i pepparkakshustävlingen!
2018-08-17, 22:44
  #1
Medlem
Mia-Rovys avatar
Linux. Macar har väl också `ps`.

Vid granskning av vissa processer så försvinner vissa tecken bland argumenten. Jag förstår inte hur det kan fungera?

Hur kan en process "ljuga" om vilka parametrar som skickats in? Kan inte det vara lite farligt? Eller missar jag något?

Kod:
# Exempel. Kicka igång ett program som visar fel
# Skit i flaggorna (om du inte vill prova själv) annat än att de innehåller kolon:

# Startar redshift (blåfilter, https://github.com/jonls/redshift)
redshift -l 55.0:10.5 -t 6000:4000 -b 1 0.6 & ps aux | grep redshift

# Resulterar i ungefär
# /run/bin/redshift -l 55.0 10.5 -t 6000 4000 -b 1 0.6 

# Notera skillnaden
# 55.0:10.5
# 55.0 10.5

Men det verkar inte vara en bugg eller liknande i `ps`. Orsaken till att tecken försvinner verkar ligga i `redshift`. För när jag inkluderar kolon i andra processer så visas det korrekt.

Då drar jag slutsatsen att det är redshift som resulterar i att argumenten skrivs ut fel. Eller vad är det som händer?
Kod:
curl https://google.com & ps aux | grep curl
# Ger rätt:
# curl https://google.com

# Men utan absolut sökväg av någon anledning, kan det ha något med saken att göra?

Någon smart detektiv här eller någon som vet något jag inte vet? Händer detta för er andra?

Kommer inte kunna sova annars
__________________
Senast redigerad av Mia-Rovy 2018-08-17 kl. 23:05.
Citera
2018-08-17, 23:35
  #2
Medlem
Ser ut som om Linux PS(och även /proc fs et.c.) läser från process memmory och visar upp det som finns lagrat där..
DVS Command line ; program namn o argument ligger inte lagrade i Kernel minnet o visas upp.
Det lagras i själva processen..

Redshift kan ta argument i stil med 123:456 ... och om man kör C och vill göra en enkel trivial inläsning av detta så är det ju rätt enkelt att försöak splitta denna strängen i 2 delar..
Där första delen är "123" och andra delen blir "456" => Sedan sätter man "\0" i mitten.
(Sedan kan man parsa bägge dessa strängar med atoi eller kanske med någon annan funktion..)
(Just i fallet ovan med redshift kan man nog parsa upp den strängen mha atoi utan att ersätta ":" med något)

Lite intressant att läsa lite om det, jag visste faktiskt inte att PS kollade av process minnet..
Citera
2018-08-18, 08:15
  #3
Moderator
Protons avatar
Övriga utvecklingsfrågor --> Programvara: övriga operativsystem
/Moderator
Citera
2018-08-18, 09:38
  #4
Moderator
vhes avatar
Citat:
Ursprungligen postat av sagonar
Redshift kan ta argument i stil med 123:456 ... och om man kör C och vill göra en enkel trivial inläsning av detta så är det ju rätt enkelt att försöak splitta denna strängen i 2 delar..
Där första delen är "123" och andra delen blir "456" => Sedan sätter man "\0" i mitten.
(Sedan kan man parsa bägge dessa strängar med atoi eller kanske med någon annan funktion..)
(Just i fallet ovan med redshift kan man nog parsa upp den strängen mha atoi utan att ersätta ":" med något)

Nu är jag rätt usel på C, men jag tycker din teori där ser ut att stämma. https://github.com/jonls/redshift/bl.../src/options.c rad 387-391.

Intressant observation, jag trodde inte heller att processen hade kontroll över vad man såg i /proc/pid/cmdline och dylikt.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback