Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

PID en Windows ($$)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Vie Jul 21, 2006 6:42 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
PID en Windows ($$) Responder citando

Hola.
Tratando de hacer un tutorial, para poner aqui, me encontre en este problema.
Mirando uno ejemplos de Win32::Process::Info encontre que para saber el PID del programa no usan $$ si no que usan Win32::Ole, asi que, quiero saber el PID de el programa, ¿Uso $$ o uso Win32::Ole?
Gracias.
Mensaje Sab Jul 22, 2006 3:20 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Sacado de Win32::API:
Código:
use Win32::API;
Win32::API->Import("kernel32", "int GetCurrentProcessId()");
$PID = GetCurrentProcessId();

pero me suena que tiene que haber otra forma...
Mensaje Sab Jul 22, 2006 9:10 am
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Embarassed al parecer si se puede usar $$ sin ningun problema, pue bien en el /t del pacquete lo ponen un codigo con esto.
Mensaje Sab Jul 22, 2006 10:32 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Re: PID en Windows ($$) Responder citando

creating021 escribió:
Hola.
Tratando de hacer un tutorial, para poner aqui, me encontre en este problema.


Cuando tengas el tutorial si quieres mándalo a uriel@baboonsoftware.com para que lo ponga en el sitio Wink


Saludos
Mensaje Jue Ago 03, 2006 6:18 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Hola kidd, queres que lo reforme para que sea un tutorial de verdad?
Tengo el tiempo, solo dime si lo queres Very Happy
Mensaje Jue Ago 03, 2006 6:32 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Estaría bien,

Saludos
Mensaje Vie Ago 11, 2006 6:22 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

En que formato?
Mensaje Mar Ago 29, 2006 7:44 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Otra pregunta, antes de publicar:
¿Este código trabaja como debería?
Perl:
if($^O eq "MSWin32"){
    use Win32::Process::Info;
    my $proc = Win32::Process::Info->new();
    my @pids = $proc->ListPids();
    foreach my $pid (@pids){
      print "$pid\s\s", join /\s\s/, $proc->GetProcInfo($pid);
      print "\n";
    }
  }

Rolling Eyes
Es que dudo del GetProcInfo($pid) ya que en el POD no lo trabajan así, si alguien tiene Windows me seria muy útil la respuesta para ponerle fín al tutorial Cool
Mensaje Mar Ago 29, 2006 8:21 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Hola:

Muy bien, ejecuté el siguiente código en mi Windows XP:

Perl:
#!/usr/bin/perl -w

use strict;


if($^O eq "MSWin32"){
    use Win32::Process::Info;
    my $proc = Win32::Process::Info->new();
    my @pids = $proc->ListPids();
    foreach my $pid (@pids){
      print "$pid", join "  ", $proc->GetProcInfo($pid);
      print "\n";
    }
  }


Y obtuve el siguiente resultado:

bash:
0HASH(0x1a624ec)
4HASH(0x1a622c4)
652HASH(0x1a61eb0)
720HASH(0x19c0f3c)
748HASH(0x1a62798)
792HASH(0x1a6281c)
812HASH(0x1a626cc)
972HASH(0x1a61dd8)
1020HASH(0x1a62900)
1128HASH(0x1a61ff4)
1172HASH(0x1a627ec)
1240HASH(0x1a62108)
1492HASH(0x1a62084)
1748HASH(0x1a61ea4)
1848HASH(0x1a61dcc)
1856HASH(0x1a626f0)
1884HASH(0x19c0f78)
1896HASH(0x1a6203c)
1968HASH(0x1a62588)
1988HASH(0x1a61f64)
2036HASH(0x19c0f84)
220HASH(0x1a62804)
276HASH(0x19c0db0)
312HASH(0x1a623e4)
408HASH(0x1a51e60)
3240HASH(0x1a62198)
848HASH(0x1a626c0)
3524HASH(0x1a62264)
4040HASH(0x1a6215c)
1320HASH(0x1a628c4)
4044HASH(0x1a51e30)
3360HASH(0x1a6221c)
2388HASH(0x1a51ecc)
1092HASH(0x1a61d54)
3856HASH(0x1a62000)
Mensaje Mie Ago 30, 2006 2:27 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Shocked El número antes del HASH.* es el PID, sale sin problema, el resto es porque sale como un hash, supongo así que con un hash queda bien.
Si no es mucha molestia, ¿Puedes intentar este orto?
Perl:
#!/usr/bin/perl -w

use diagnostics;


if($^O eq "MSWin32"){
    use Win32::Process::Info;
    my $proc = Win32::Process::Info->new();
    my @pids = $proc->ListPids();
    foreach my $pid (@pids){
      my %inf = $proc->GetProcInfo($pid);
      print "$pid => ", join "\n:\t", (sort keys %inf);
      print "\n";
    }
  }

Embarassed Que pena.
Si no es asi, será con Data::Dumper Confused
Mensaje Mie Ago 30, 2006 2:56 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Hola:

Aquí está el resultado:

bash:
0 => HASH(0x1bf9fb4)
4 => HASH(0x1bf9bdc)
652 => HASH(0x1c01434)
720 => HASH(0x1bf9f18)
756 => HASH(0x1c015b4)
800 => HASH(0x1bfa164)
820 => HASH(0x1bfa068)
976 => HASH(0x1bf9be8)
1028 => HASH(0x1bfa4d0)
1136 => HASH(0x1bf9ed0)
1188 => HASH(0x1bf9ffc)
1260 => HASH(0x1bf9fcc)
1504 => HASH(0x1b60454)
1748 => HASH(0x1bfa320)
1868 => HASH(0x1b60400)
1880 => HASH(0x1bf9f60)
1908 => HASH(0x1bf98f4)
1920 => HASH(0x1bfa278)
1988 => HASH(0x1bf9ae0)
2016 => HASH(0x1bf9924)
176 => HASH(0x1bf9948)
272 => HASH(0x1bf9828)
292 => HASH(0x1b60418)
324 => HASH(0x1b606ac)
2060 => HASH(0x1b60748)
2552 => HASH(0x1b6073c)
3344 => HASH(0x1bfa218)
3480 => HASH(0x1b6064c)
580 => HASH(0x1bfa128)
2164 => HASH(0x1c01464)
2440 => HASH(0x1bfa20c)
932 => HASH(0x1b604e4)
2476 => HASH(0x1b60634)



Saludos
Mensaje Mie Ago 30, 2006 3:04 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Hola:

Ya ví donde está el problema. Al correr el siguiente código:

Perl:
#!/usr/bin/perl -w

use diagnostics;

use Data::Dumper;

if($^O eq "MSWin32"){
    use Win32::Process::Info;
    my $proc = Win32::Process::Info->new();
    my @pids = $proc->ListPids();

    foreach my $pid (@pids){
      my $inf = $proc->GetProcInfo($pid);

      print Dumper($inf);

    }

  }



Obtengo el siguiente resultado (solamente te pongo los primeros tres procesos):

Código:
$VAR1 = [
          {
            'TerminationDate' => undef,
            'QuotaNonPagedPoolUsage' => 0,
            'ParentProcessId' => 0,
            'Status' => undef,
            'OSName' => 'Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1',
            'CSName' => 'PETRITA',
            'PeakPageFileUsage' => 0,
            'PageFileUsage' => 0,
            'QuotaPeakNonPagedPoolUsage' => 0,
            'WorkingSetSize' => '16384',
            'CreationDate' => undef,
            'HandleCount' => 0,
            'WindowsVersion' => '5.1.2600',
            'PeakWorkingSetSize' => 0,
            'MaximumWorkingSetSize' => undef,
            'PeakVirtualSize' => '0',
            'WriteOperationCount' => '0',
            'SessionId' => 0,
            'PrivatePageCount' => '0',
            'ProcessId' => 0,
            'Caption' => 'System Idle Process',
            'CommandLine' => undef,
            'OSCreationClassName' => 'Win32_OperatingSystem',
            'Priority' => 0,
            'MinimumWorkingSetSize' => undef,
            'CreationClassName' => 'Win32_Process',
            'ThreadCount' => 1,
            'KernelModeTime' => '6985.2242592',
            'ExecutionState' => undef,
            'CSCreationClassName' => 'Win32_ComputerSystem',
            'InstallDate' => undef,
            'WriteTransferCount' => '0',
            'OtherTransferCount' => '0',
            'PageFaults' => 0,
            'VirtualSize' => '0',
            'QuotaPagedPoolUsage' => 0,
            'ReadTransferCount' => '0',
            'OtherOperationCount' => '0',
            'ReadOperationCount' => '0',
            'QuotaPeakPagedPoolUsage' => 0,
            'ExecutablePath' => undef,
            'UserModeTime' => '0',
            'Name' => 'System Idle Process',
            'Description' => 'System Idle Process',
            'Handle' => '0'
          }
        ];
$VAR1 = [
          {
            'TerminationDate' => undef,
            'QuotaNonPagedPoolUsage' => 0,
            'ParentProcessId' => 0,
            'Status' => undef,
            'OSName' => 'Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1',
            'CSName' => 'PETRITA',
            'PeakPageFileUsage' => 0,
            'PageFileUsage' => 0,
            'QuotaPeakNonPagedPoolUsage' => 0,
            'WorkingSetSize' => '57344',
            'CreationDate' => undef,
            'HandleCount' => 293,
            'WindowsVersion' => '5.1.2600',
            'PeakWorkingSetSize' => 4161536,
            'MaximumWorkingSetSize' => 1413120,
            'PeakVirtualSize' => '32620544',
            'WriteOperationCount' => '1663',
            'SessionId' => 0,
            'PrivatePageCount' => '28672',
            'ProcessId' => 4,
            'Caption' => 'System',
            'CommandLine' => undef,
            'OSCreationClassName' => 'Win32_OperatingSystem',
            'Priority' => 8,
            'MinimumWorkingSetSize' => 0,
            'CreationClassName' => 'Win32_Process',
            'ThreadCount' => 74,
            'KernelModeTime' => '30.7842656',
            'ExecutionState' => undef,
            'CSCreationClassName' => 'Win32_ComputerSystem',
            'InstallDate' => undef,
            'WriteTransferCount' => '8228134',
            'OtherTransferCount' => '1137136',
            'PageFaults' => 8659,
            'VirtualSize' => '1945600',
            'QuotaPagedPoolUsage' => 0,
            'ReadTransferCount' => '11143696',
            'OtherOperationCount' => '12172',
            'ReadOperationCount' => '310',
            'QuotaPeakPagedPoolUsage' => 0,
            'ExecutablePath' => undef,
            'UserModeTime' => '0',
            'Name' => 'System',
            'Description' => 'System',
            'Handle' => '4'
          }
        ];
$VAR1 = [
          {
            'TerminationDate' => undef,
            'QuotaNonPagedPoolUsage' => 640,
            'ParentProcessId' => 4,
            'Status' => undef,
            'OSName' => 'Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1',
            'CSName' => 'PETRITA',
            'PeakPageFileUsage' => 1679360,
            'PageFileUsage' => 172032,
            'QuotaPeakNonPagedPoolUsage' => 1240,
            'WorkingSetSize' => '98304',
            'CreationDate' => 1156968300,
            'HandleCount' => 21,
            'WindowsVersion' => '5.1.2600',
            'PeakWorkingSetSize' => 475136,
            'MaximumWorkingSetSize' => 1413120,
            'PeakVirtualSize' => '406568960',
            'WriteOperationCount' => '4',
            'SessionId' => 0,
            'PrivatePageCount' => '172032',
            'Owner' => 'NT AUTHORITY\\SYSTEM',
            'ProcessId' => 652,
            'Caption' => 'smss.exe',
            'CommandLine' => '\\SystemRoot\\System32\\smss.exe',
            'OSCreationClassName' => 'Win32_OperatingSystem',
            'Priority' => 11,
            'MinimumWorkingSetSize' => 204800,
            'CreationClassName' => 'Win32_Process',
            'ThreadCount' => 3,
            'KernelModeTime' => '1.1416416',
            'ExecutionState' => undef,
            'CSCreationClassName' => 'Win32_ComputerSystem',
            'InstallDate' => undef,
            'WriteTransferCount' => '4',
            'OtherTransferCount' => '910',
            'PageFaults' => 493,
            'VirtualSize' => '3915776',
            'QuotaPagedPoolUsage' => 5272,
            'OwnerSid' => 'S-1-5-18',
            'ReadTransferCount' => '4122',
            'OtherOperationCount' => '189',
            'ReadOperationCount' => '9',
            'QuotaPeakPagedPoolUsage' => 398312,
            'ExecutablePath' => 'C:\\WINDOWS\\System32\\smss.exe',
            'UserModeTime' => '0.0100144',
            'Name' => 'smss.exe',
            'Description' => 'smss.exe',
            'Handle' => '652'
          }
        ];



Me parece que este es el resultado que estás buscando.

Saludos
Mensaje Mie Ago 30, 2006 4:43 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Very Happy Claro, eso era, ahora te mando el tutorial en cuanto el código quede bien.
Gracias por la ayuda y verás que el tutorial al fín es algo útil, te enseña a hacer un ps -xa Wink
Mensaje Lun Sep 18, 2006 6:39 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Embarassed Que pena, tanto tiempo y no lo he terminado, lo que pasa es que como se hace una lista tan grande tengo que hacer una interface gráfica que ande en Windows y UNIX, para eso estoy usando ANSI Scape, y esta quedando muy bien, aunque tengo el problema de que sí estás en UNIX y eres usuario no puedes leer links, por ende no se puede saber el nombre del programa (se sabe el PID y que root lo ejecutó, pero nada más) y se le pone un texto en rojo para verlo más fácil.
Falta poco pero segúro que estra bueno, te lo mando en PDF cuando esté listo.
Una imagen, un poco fea porque la manipulan para que pese menos, Ahí se ve todo desde usuario (todo lo de root), el ¡ es quitado despues y si el usuario lo pide tira informacion (tendrá un prompt, modo de comando) y poco a poco va resultando.
Un saludo (al menos)
Smile

Click aquí para ver imagen
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group