ziskanie vystupu z programov ps, top...

Sekcia: Aplikácie & Desktop 01.05.2012 | 16:27
Avatar matej148 Fedora  Používateľ
Zdravim,
neviete mi prosim niekto poradit, ze ako je mozne ziskat aktualny vystup z programov ako ps, top, apachetop, ktore vlastne bezia "donekonecna"? Nieco ako 'top > subor'...
Vdaka za odpoved. Ide mi prioritne o ten apachetop.
Matej
    • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 17:11
      d_   Návštevník
      Takto: ps auxn 1>name_of_file a top -bn 1 >name_of_file :)
      • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 17:17
        Avatar matej148 Fedora  Používateľ
        Vdaka a ten apachetop ta nenapada, ze ako by to mohlo ist?
        • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 18:27
          Avatar m4jkl   Používateľ
          asi ho budes musiet rucne zabit
          • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 18:35
            d_   Návštevník
            Hm, ručne zabiť? Hm, to nie je nutné. Stači pridať 2 riadky do zdrojového kódu toho programu a po prvom zobrazení a aj sám skončí. Len problém je ncurses zobrazovanie. Na prepisanie zobrazenia cas nemám a vystup neviem prekonvertovať ničím do plain text so zachovaním formatovania.
            • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 18:43
              Avatar m4jkl   Používateľ
              a ako velmi zle vyzera ten vystup ked to presmerujes do suboru? viem, ze u top-u su tam nejake znaky navyse, ale zasa taka tragedia to nie je
              • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 18:51
                Avatar matej148 Fedora  Používateľ
                To je ten problem, ze ked spravim apachetop > subor, tak sa to nikdz neukonci dokial to neukoncim ja a potom ten subor je prazdny...
            • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 18:46
              Avatar matej148 Fedora  Používateľ
              Konkretne ide o to, ze vystup z apachetop potrebujem presmerovat do jednej aplikacie (gtk#) a v zasade mi je jedno akym sposobom... Ked som to riesil takto:
              Process p = new Process();
              p.StartInfo.UseShellExecute = false;
              p.StartInfo.RedirectStandardOutput = true;
              p.StartInfo.FileName = "apachetop";
              p.Start();
              string output = p.StandardOutput.ReadToEnd();
              p.WaitForExit();

              Tak aplikacia cykli, lebo ten program bezi donekonecna...
              • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 18:54
                Avatar m4jkl   Používateľ
                kedze ten apachetop nema prepinac, ktory by zabezpecil, ze sa sam vypne, tak by som to riesil tym zabitim. upravovat zdrojak toho apachetop sice lahko mozes, ale budes musiet tu upravenu verziu so sebou tahat vsade kde sa pohnes. zalezi co ta v tom vypise zaujima. zda sa, ze apachetop intenzivne cita /var/log/httpd/access_log, takze by mozno stacilo parsovat len tento dany subor.
                • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 19:05
                  Avatar matej148 Fedora  Používateľ
                  Ta aplikacia bude urcena pre rozne kompy, takze nemozem upravovat apachetop. To ze nema prepinac na export je hlavny problem a neviem ako sa tomu vyhnut... Na urovni aplikacie nemozem ani riesit nejake zabitie vykonavania apachetop-u a ziskanie toho vystupu...
                  • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 21:51
                    Avatar m4jkl   Používateľ
                    hmm... preco nemozes riesit to zabitie procesu?
                    • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 22:31
                      Avatar matej148 Fedora  Používateľ
                      Tak mozno by to nebol problem, ale ako teda zachytim ten vystup z apachetop?
                      • Re: ziskanie vystupu z programov ps, top... 01.05.2012 | 23:21
                        Avatar m4jkl   Používateľ
                        hore v tom kusku kodu mas
                        string output = p.StandardOutput.ReadToEnd();

                        co by mohlo fungovat. ked zabijes ten apachetop, tak to cyklit nebude (ak to dobre chapem). vazne neviem co vsetko z toho vypisu apachetopu potrebujes, ale pozeral si na ten subor /var/log/httpd/access_log?
                        • Re: ziskanie vystupu z programov ps, top... 02.05.2012 | 00:27
                          Avatar matej148 Fedora  Používateľ
                          Ano, ten subor poznam dobre, len problemom je ze apachetop ho sice vzdy pri spusteni nacita a prestane ho nacitavat az ked sa tvrdo vypne. To sposobuje to ze bezi stale. Prikaz string output = p.StandardOutput.ReadToEnd(); mi tiez nepomoze, lebo "end" toho citania neexistuje (takze ked som to tak najprv skusil tak moja aplikacia zatuhla kedze stale nacitavala)...
                          • Re: ziskanie vystupu z programov ps, top... 02.05.2012 | 00:59
                            Avatar matej148 Fedora  Používateľ
                            mam to:
                            apachetop > file 2>&1 & sleep 1; kill $! ;
                            diky za snahu