Kirjoittaja Aihe: Tausta-ajo ja ohjelman lopettaminen  (Luettu 2811 kertaa)

teele

  • Käyttäjä
  • Viestejä: 815
    • Profiili
Tausta-ajo ja ohjelman lopettaminen
« : 11.02.12 - klo:11.41 »
Osaisiko joku kertoa, mitä ohjelman lopettaminen päätteestä oikein tarkoittaa.

Voin käynnistää Writerin taustalle päätteestä komennolla

lowriter -accept="socket,host=localhost,port=2002;urp;" &

Writerin ikkuna ilmestyy näytölle, ja kaikki näyttää toimivan normaalisti. Mutta kun lopetan Writerin päätteestä (kill), Writer-ikkuna toimii yhä. Jos käynnistän Writerin edustatyöksi, käynnistävä pääte lukkiutuu siksi ajaksi, kun Writer on käynnissä, mikä sekin on ihan normaalia. Jos sen sijaan keskeytän Writer-työn päätteeltä (ctrl-Z), Writer-ikkuna jumittuu.

Voisinko jollain tavalla lopettaa Writerin päätteestä, vaikka se ei olisikaan turvallista, koska tekstimuutokset voisivat sillion hävitä.

Jos haluan ajaa ohjelmaa, joka muuttaa Writerin tekstiä, miten voin laittaa sen skriptiin niin, että se aloittaa tekstin muuttelun vasta sitten, kun Writer on käynnistynyt kunnolla. Ajastaminen ei ehkä ole hyvä ajatus, koska Writerin käynnistysaika  riippuu monista tekijöistä.

Teele

Tommi S.

  • Käyttäjä
  • Viestejä: 240
    • Profiili
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #1 : 11.02.12 - klo:14.20 »
Osaisiko joku kertoa, mitä ohjelman lopettaminen päätteestä oikein tarkoittaa.

Voin käynnistää Writerin taustalle päätteestä komennolla

lowriter -accept="socket,host=localhost,port=2002;urp;" &

Writerin ikkuna ilmestyy näytölle, ja kaikki näyttää toimivan normaalisti. Mutta kun lopetan Writerin päätteestä (kill), Writer-ikkuna toimii yhä. Jos käynnistän Writerin edustatyöksi, käynnistävä pääte lukkiutuu siksi ajaksi, kun Writer on käynnissä, mikä sekin on ihan normaalia. Jos sen sijaan keskeytän Writer-työn päätteeltä (ctrl-Z), Writer-ikkuna jumittuu.

Voisinko jollain tavalla lopettaa Writerin päätteestä, vaikka se ei olisikaan turvallista, koska tekstimuutokset voisivat sillion hävitä.

Kyllä sen pitäisi sammua kill komennolla, jos vain osaa antaa oikean id-numeron. Kun ohjelman käynnistää päätteestä taustalle, niin ne numerot jotka komentorivi näyttää (tyyliä [1] 1234) ovat job-id ja prosessiryhmä-id.

Jos haluaa lopettaa ohjelman job-id:n perusteella niin numero täytyy antaa prosenttimerkin kanssa, eli:
Koodia: [Valitse]
kill %1
Jos haluaa lopettaa ohjelman prosessiryhmä-id:n perusteella niin numero täytyy antaa negatiivisena, ja jotta kill ei luule miinusmerkkiä jonkin kytkimen alkumerkiksi, pitää numero erottaa kytkimistä kahdella viivalla, eli:
Koodia: [Valitse]
kill -- -1234
Jos haluaa lopettaa ohjelman prosessi-id:n perusteella, täytyy kyseinen numero kaivaa ensin ps komennolla esiin, jonka jälkeen sen voi antaa sellaisenaan kill komennolle.

Jos ohjelma jostain syystä käynnistää useita eri prosesseja, niin kaikki prosessit voi sammuttaa joko yksitellen prosessi-id:n perusteella, tai sammuttamalla prosessiryhmän, tai sammuttamalla session johtajan. Nämä id-numerot voi kaivaa esille esim. komennolla ps -j. PID on prosessi-id, PGID on ryhmä-id, ja SID on sessiojohtajan-id.

Oletuksena kill lähettää ohjelmalle signaalin numero 15 (symboliselta nimeltään TERM tai SIGTERM). Ohjelmat voivat jossain määrin itse määritellä miten ne reagoivat eri signaaleihin, joten ohjelma ei välttämättä heti sammu signaalin saatuaan. On kuitenkin olemassa signaali numero 9 (KILL tai SIGKILL) jota ohjelma ei voi ohittaa vaan se sammutetaan väkisin.

Jos siis pelkkä kill ei jostain syystä toimi, niin ohjelman voi sammuttaa väkisin komennolla kill -9 1234 tai kill -KILL 1234.


Jos haluan ajaa ohjelmaa, joka muuttaa Writerin tekstiä, miten voin laittaa sen skriptiin niin, että se aloittaa tekstin muuttelun vasta sitten, kun Writer on käynnistynyt kunnolla. Ajastaminen ei ehkä ole hyvä ajatus, koska Writerin käynnistysaika  riippuu monista tekijöistä.

Teele

Kaikkien muiden ohjelmien näkökulmasta Writer on käynnistynyt sitten kun se on käynnistynyt. Ne eivät tunne mitään "käynnistynyt kunnolla" käsitettä, vaan käynnissä oleva Writer on käynnissä, se vaan tekee käynnissä ollessaan niin että se ensin valmistelee käyttöliittymää ym., jolloin ihmiskäyttäjän mielestä ohjelma ei ole "kunnolla" käynnistynyt. Tähän ei taida olla mitään muuta ratkaisua kuin se että Writerin pitää pystyä itse jotenkin viestittämään milloin se on "kunnolla käynnistynyt", eli jos Writerista löytyy jokin ominaisuus jolla kyseistä käynnistymisen astetta voisi kysellä niin silloin tämä voisi olla mahdollista. En tosin tiedä onko kyseistä ominaisuutta olemassa.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #2 : 11.02.12 - klo:16.14 »
Törmäsin tähän kun ajoin päätteestä ja lopetin:

lowriter
*** glibc detected *** /usr/lib/libreoffice/program/soffice.bin: free(): corrupted unsorted chunks: 0xb02076d8 ***

Google -haku virheellä toi taasen tämän (en tiedä onko asialla mitään yhteyttä):

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=652304

Jotain tuossa Libre Office Writer: ssa näyttäisi kurahtavan kun sen käynnistää päätteen kautta ja sulkee.

Itse ohjelmien tappamisesta päätteen kautta, oma suosikkini on ollut "pkill"  kun sille voi antaa ohjelman nimen sen sijaan että ensin selvittää numerokoodeja.  Jotta ei tappaisi vahingossa enemmän kuin ajatteli niin kannattaa vilkaista ensin "pgrep" ohjelmalla mitä on käynnissä.  Nuo molemmat nimittäin arvaavat yleensä jo sanan puolikkaasta mitä haluan, esimerkki:

Koodia: [Valitse]
pgrep -l fir           ^-- tuo on pieni L kirjain tuolla keskellä

löytää firefoxin  --- mutta osuma tulee myös firewire -sanasta jos sellainen sattuisi olemaan...
Samoin käy myös kun antaa:

Koodia: [Valitse]
pkill fir
*kaikki*  "fir" -tekstin sisältävät sammahtavat.  Tuota "pkill": ä joutuu tehostamaan tilanteen mukaan joko "sudo": lla tai samoilla mausteilla mitä tuolla edellä kerrottiin, yleisin on se "-9"  eli

Koodia: [Valitse]
sudo pkill -9 fir  



« Viimeksi muokattu: 11.02.12 - klo:16.33 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #3 : 11.02.12 - klo:16.26 »
Täytyy muistaa, että LibreOffice käynnistää monta prosessia. Minulla lowriterin päätteestä käynnistettyäni ainakin seuraavat näyttäisivät liittyvän asiaan:

Koodia: [Valitse]
7106 pts/0    00:00:00 lowriter
 7107 pts/0    00:00:00 oosplash.bin
 7118 pts/0    00:00:02 soffice.bin

(Toisaalta minulla on pikakäynnistin kaiken aikaa ilmoitusalueella, ties miten sekin vaikuttaa.)

Jos nyt tappaa prosessin 7106, LibreOffice Writer -ikkunalle ei näytä tapahtuvan mitään. Se katoaa vasta, kun tappaa prosessin 7118, soffice.bin – mutta tällöin katoaa myös pikakäynnistin ilmoitusalueelta.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

teele

  • Käyttäjä
  • Viestejä: 815
    • Profiili
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #4 : 11.02.12 - klo:16.41 »

No nyt selviää...

Saan lopetettua esim. lowriterin työn tunnuksella, kunhan laitan sen %-merkin vain eteen, writer-ikkuna häipyy kiltisti.

Mutta kun tein scriptin, jossa käynnistän calcin tai writerin, calc tai writer käynnistyy ja toimii, mutta päätteestä, josta ajan skriptin,  en saa näkyviin calcin tai writerin sen työnumeroa, vaikka yritän

jobs

tai

echo $!

Skripti on oman kotihakemistoni /bin -hakemistossa, mutta minnehän ne työnnumerot nyt menevät. Calc- ja Writer-tiedostot ovat omassa työkansiossaan, johon menee vähän erilainen polku.

Teele

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #5 : 11.02.12 - klo:16.47 »
Tämäkin kertoo jotain mielenkiintoista silloin kun tuo writer on käynnissä:

Koodia: [Valitse]
ps -F $(pgrep soffice)
Näet oikean komentorivin tuolla eli millä komennolla se oli käynnistetty:

      /usr/lib/libreoffice/program/soffice.bin -writer -splash-pipe=5

Tuolla näet tietysti mistä hyvänsä ohjelmasta miten se on laitettu käyntiin kun korvaat tuon "soffice" sillä käynnissäolevan ohjelman nimellä mikä kiinnostaa...
« Viimeksi muokattu: 11.02.12 - klo:16.57 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #6 : 11.02.12 - klo:16.48 »
Saan lopetettua esim. lowriterin työn tunnuksella, kunhan laitan sen %-merkin vain eteen, writer-ikkuna häipyy kiltisti.

Mutta kun tein scriptin, jossa käynnistän calcin tai writerin, calc tai writer käynnistyy ja toimii, mutta päätteestä, josta ajan skriptin,  en saa näkyviin calcin tai writerin sen työnumeroa,

Taitaa olla niin, että nuo työnumerot (erotuksena siis prosessinumeroista) kuuluvat ohjelman käynnistävälle päätteelle. Kun käynnistät skriptin, käynnistät myös uuden päätteen – ja työnumerot kuuluvat sille, eivät päätteelle, josta skriptin käynnistit.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #7 : 11.02.12 - klo:17.01 »
cat /usr/bin/lowriter

#!/bin/sh
/usr/lib/libreoffice/program/soffice -writer "$@"

eli tuo lowriter on tuollainen skripti.


Itselläni näyttäisi käynnistyvän ja sammuvan ok kun käynnistää tuon mallin mukaisesti

Koodia: [Valitse]
soffice -writer
Koodia: [Valitse]
soffice -calc
« Viimeksi muokattu: 11.02.12 - klo:17.10 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Tausta-ajo ja ohjelman lopettaminen
« Vastaus #8 : 11.02.12 - klo:17.19 »
eli tuo lowriter on tuollainen skripti.

Juu, pitäisikin aina muistaa, että moni /usr/binistä löytyvä ”ohjelma” voi oikeasti olla vain skripti.

Apropoo, sivuhuomiona, on huvittavaa, kuinka LibreOffice ohjelmabinaarien ja -skriptien nimissä näkyy ohjelmiston koko kehityshistoria: ”lowriter” koska ”LibreOffice”, ”oosplash.bin” koska ”OpenOffice”, ”soffice.bin” koska StarOffice.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11