summaryrefslogtreecommitdiff
authorbipolar <bipolar>2002-03-04 03:35:25 (UTC)
committer bipolar <bipolar>2002-03-04 03:35:25 (UTC)
commit6f2ff65bfac36e80cd9e6c9977545a4b85d3b3af (patch) (unidiff)
treed145b32c25af017889032893e4a890ae965104ea
parentb72d53b26a892c63d266180d87c3efad2369d1b8 (diff)
downloadopie-6f2ff65bfac36e80cd9e6c9977545a4b85d3b3af.zip
opie-6f2ff65bfac36e80cd9e6c9977545a4b85d3b3af.tar.gz
opie-6f2ff65bfac36e80cd9e6c9977545a4b85d3b3af.tar.bz2
committed by ljp (llornkcor): added SIGTERM when double clicking a process.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/processinfo.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/noncore/settings/sysinfo/processinfo.cpp b/noncore/settings/sysinfo/processinfo.cpp
index f95d9cc..8e992d5 100644
--- a/noncore/settings/sysinfo/processinfo.cpp
+++ b/noncore/settings/sysinfo/processinfo.cpp
@@ -1,119 +1,139 @@
1/********************************************************************** 1/**********************************************************************
2** ProcessInfo 2** ProcessInfo
3** 3**
4** Display process information 4** Display process information
5** 5**
6** Copyright (C) 2002, Dan Williams 6** Copyright (C) 2002, Dan Williams
7** williamsdr@acm.org 7** williamsdr@acm.org
8** http://draknor.net 8** http://draknor.net
9** 9**
10** This file may be distributed and/or modified under the terms of the 10** This file may be distributed and/or modified under the terms of the
11** GNU General Public License version 2 as published by the Free Software 11** GNU General Public License version 2 as published by the Free Software
12** Foundation and appearing in the file LICENSE.GPL included in the 12** Foundation and appearing in the file LICENSE.GPL included in the
13** packaging of this file. 13** packaging of this file.
14** 14**
15** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 15** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17** 17**
18**********************************************************************/ 18**********************************************************************/
19 19
20#include <qheader.h> 20#include <qheader.h>
21#include <qlistview.h> 21#include <qlistview.h>
22#include <qlayout.h> 22#include <qlayout.h>
23#include <qtimer.h> 23#include <qtimer.h>
24#include <qfile.h> 24#include <qfile.h>
25#include <qdir.h> 25#include <qdir.h>
26#include <qmessagebox.h>
27
28#include <sys/types.h>
29#include <signal.h>
26 30
27#include "processinfo.h" 31#include "processinfo.h"
28 32
29ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) 33ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl )
30 : QWidget( parent, name, fl ) 34 : QWidget( parent, name, fl )
31{ 35{
32 QVBoxLayout *vb = new QVBoxLayout( this, 5 ); 36 QVBoxLayout *vb = new QVBoxLayout( this, 5 );
33 37
34 ProcessView = new QListView( this, "ProcessView" ); 38 ProcessView = new QListView( this, "ProcessView" );
35 int colnum = ProcessView->addColumn( tr( "PID" ) ); 39 int colnum = ProcessView->addColumn( tr( "PID" ) );
36 ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); 40 ProcessView->setColumnAlignment( colnum, Qt::AlignRight );
37 colnum = ProcessView->addColumn( tr( "Command" ),96 ); 41 colnum = ProcessView->addColumn( tr( "Command" ),96 );
38 ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); 42 ProcessView->setColumnAlignment( colnum, Qt::AlignRight );
39 colnum = ProcessView->addColumn( tr( "Status" ) ); 43 colnum = ProcessView->addColumn( tr( "Status" ) );
40 ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); 44 ProcessView->setColumnAlignment( colnum, Qt::AlignRight );
41 colnum = ProcessView->addColumn( tr( "Time" ) ); 45 colnum = ProcessView->addColumn( tr( "Time" ) );
42 ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); 46 ProcessView->setColumnAlignment( colnum, Qt::AlignRight );
43 ProcessView->setAllColumnsShowFocus( TRUE ); 47 ProcessView->setAllColumnsShowFocus( TRUE );
44 connect( ProcessView, SIGNAL( doubleClicked(QListViewItem *) ), this, SLOT( viewProcess(QListViewItem *) ) ); 48 connect( ProcessView, SIGNAL( doubleClicked(QListViewItem *) ), this, SLOT( viewProcess(QListViewItem *) ) );
45 49
46 vb->addWidget( ProcessView ); 50 vb->addWidget( ProcessView );
47 51
48 QTimer *t = new QTimer( this ); 52 QTimer *t = new QTimer( this );
49 connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); 53 connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) );
50 t->start( 5000 ); 54 t->start( 5000 );
51 55
52 updateData(); 56 updateData();
53} 57}
54 58
55ProcessInfo::~ProcessInfo() 59ProcessInfo::~ProcessInfo()
56{ 60{
57} 61}
58 62
59void ProcessInfo::updateData() 63void ProcessInfo::updateData()
60{ 64{
61 QString processnum(""); 65 QString processnum("");
62 QString processcmd(""); 66 QString processcmd("");
63 QString processstatus(""); 67 QString processstatus("");
64 QString processtime(""); 68 QString processtime("");
65 int pid, ppid, pgrp, session, tty, tpgid, utime, stime, cutime, cstime, counter, priority, starttime, 69 int pid, ppid, pgrp, session, tty, tpgid, utime, stime, cutime, cstime, counter, priority, starttime,
66 signal, blocked, sigignore, sigcatch; 70 signal, blocked, sigignore, sigcatch;
67 uint flags, minflt, cminflt, majflt, cmajflt, timeout, itrealvalue, vsize, rss, rlim, startcode, 71 uint flags, minflt, cminflt, majflt, cmajflt, timeout, itrealvalue, vsize, rss, rlim, startcode,
68 endcode, startstack, kstkesp, kstkeip, wchan; 72 endcode, startstack, kstkesp, kstkeip, wchan;
69 char state; 73 char state;
70 char comm[255]; 74 char comm[255];
71 75
72 ProcessView->clear(); 76 ProcessView->clear();
73 77
74 QDir *procdir = new QDir("/proc"); 78 QDir *procdir = new QDir("/proc");
75 procdir->setFilter(QDir::Dirs); 79 procdir->setFilter(QDir::Dirs);
76 procdir->setSorting(QDir::Name); 80 procdir->setSorting(QDir::Name);
77 QFileInfoList *proclist = new QFileInfoList(*(procdir->entryInfoList())); 81 QFileInfoList *proclist = new QFileInfoList(*(procdir->entryInfoList()));
78 if ( proclist ) 82 if ( proclist )
79 { 83 {
80 QFileInfoListIterator it(*proclist); 84 QFileInfoListIterator it(*proclist);
81 QFileInfo *f; 85 QFileInfo *f;
82 while ( ( f = it.current() ) != 0 ) 86 while ( ( f = it.current() ) != 0 )
83 { 87 {
84 ++it; 88 ++it;
85 processnum = f->fileName(); 89 processnum = f->fileName();
86 if ( processnum >= "0" && processnum <= "99999" ) 90 if ( processnum >= "0" && processnum <= "99999" )
87 { 91 {
88 FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r"); 92 FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r");
89 93
90 if ( procfile ) 94 if ( procfile )
91 { 95 {
92 fscanf( procfile, 96 fscanf( procfile,
93 "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u", 97 "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u",
94 &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt, 98 &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt,
95 &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout, 99 &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout,
96 &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack, 100 &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack,
97 &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan ); 101 &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan );
98 processnum = processnum.rightJustify( 5, ' ' ); 102 processnum = processnum.rightJustify( 5, ' ' );
99 processcmd = QString( comm ).replace( QRegExp( "(" ), "" ); 103 processcmd = QString( comm ).replace( QRegExp( "(" ), "" );
100 processcmd = processcmd.replace( QRegExp( ")" ), "" ); 104 processcmd = processcmd.replace( QRegExp( ")" ), "" );
101 processstatus = state; 105 processstatus = state;
102 processtime.setNum( ( utime + stime ) / 100 ); 106 processtime.setNum( ( utime + stime ) / 100 );
103 processtime = processtime.rightJustify( 9, ' ' ); 107 processtime = processtime.rightJustify( 9, ' ' );
104 fclose( procfile ); 108 fclose( procfile );
105 109
106 ( void ) new QListViewItem( ProcessView, processnum, processcmd, processstatus, processtime ); 110 ( void ) new QListViewItem( ProcessView, processnum, processcmd, processstatus, processtime );
107 } 111 }
108 } 112 }
109 } 113 }
110 } 114 }
111 115
112 delete proclist; 116 delete proclist;
113 delete procdir; 117 delete procdir;
114} 118}
115 119
116void ProcessInfo::viewProcess(QListViewItem *process) 120void ProcessInfo::viewProcess(QListViewItem *process)
117{ 121{
122 QString pid= process->text(0);
123 QString command = process->text(1);
124 switch( QMessageBox::information( this, (tr("Kill Process?")),
125 (tr("You really want to kill\n"+command+" PID: "+pid+"?")),
126 (tr("Yes")), (tr("No")), 0 )){
127 case 0: // Yes clicked,
128 {
129 bool ok;
130 pid_t child=pid.toInt(&ok,10);
131 if((kill(child,SIGTERM)) < 0)
132 perror("kill:SIGTERM");
133 }
134 break;
135 case 1: // Cancel
136 break;
137 };
118//printf("Double click for PID: %s\n", process->text(0).stripWhiteSpace().latin1()); 138//printf("Double click for PID: %s\n", process->text(0).stripWhiteSpace().latin1());
119} 139}