diff --git a/src/assets/index.js b/src/assets/index.js
index a97b033..97d18b9 100644
--- a/src/assets/index.js
+++ b/src/assets/index.js
@@ -3,7 +3,7 @@ const WINDOW_DEFAULT_ICON = './imgs/window.png'
CacheIcons = async tasks => {
var noCaches = [];
- if (window.isWin) {
+ if (utools.isWindows()) {
for (var t of tasks) {
if (/^[A-z]:\\/.test(t.Path)) {
if (localStorage[basename(t.Path, '.exe')] == undefined && !noCaches.includes(t.Path)) noCaches.push(t.Path)
@@ -15,7 +15,7 @@ CacheIcons = async tasks => {
localStorage[basename(i.path, '.exe')] = i.b64Ico;
});
}
- } else {
+ } else if(utools.isMacOs()){
for (var t of tasks) {
if (t.app) {
if (localStorage[basename(t.app, '.app')] == undefined && !noCaches.includes(t.app)) noCaches.push(t.app)
@@ -31,16 +31,17 @@ CacheIcons = async tasks => {
}
kill = async (pid, restart) => {
- await window.taskkill(pid, restart)
- tasks = await tasklist();
- show(tasks, window.text);
+ if (window.taskkill(pid, restart)) {
+ var tasks = await tasklist();
+ show(tasks, window.text);
+ }
}
search = (t, text) => {
text = text.toUpperCase();
var taskinfo = '';
var icon;
- if (window.isWin) {
+ if (utools.isWindows()) {
icon = WINDOW_DEFAULT_ICON
if (/^[A-z]:\\/.test(t.Path)) {
var cache = localStorage[basename(t.Path, '.exe')];
@@ -97,7 +98,7 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
}
}
// var initTime = new Date().getTime();
- tasks = await tasklist();
+ var tasks = await tasklist();
if (tasks) {
window.text = '';
// 读取进程耗时
@@ -110,7 +111,7 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
// iconsCachedTime -= (tasksLoadedTime + initTime);
// console.log(iconsCachedTime);
show(tasks, window.text);
- var sign = isWin ? 'Alt' : '⌘';
+ var sign = utools.isMacOs() ? '⌘' : 'Alt';
$('.numbers').html(`
${sign}+1
${sign}+2
@@ -127,7 +128,7 @@ utools.onPluginEnter( async ({ code, type, payload }) => {
utools.setSubInput(({ text }) => {
window.text = text;
show(tasks, text);
- }, '左/右键 -> 关闭/重启进程; ctrl + c/e/r -> 复制路径/在文件管理器中显示/重启');
+ }, '左/右键 -> 关闭/重启进程; ctrl + c/e/r -> 复制路径/文件管理器中显示/重启');
utools.onPluginOut(() => {
var update = { _id: "iconCache", data: localStorage };
if (db) update._rev = db._rev;
@@ -164,8 +165,13 @@ Mousetrap.bind('ctrl+c', () => {
});
Mousetrap.bind('ctrl+e', () => {
- var path = $(".select").children(".path").text();
- open(path);
+ var path
+ if (utools.isLinux()) {
+ path = getLinuxProcPath($(".select").attr('id'))
+ } else {
+ path = $(".select").children(".path").text();
+ }
+ if(path) open(path);
return false
});
@@ -211,7 +217,7 @@ Mousetrap.bind('up', () => {
return false
});
-key = isWin ? 'alt' : 'command'
+key = utools.isMacOs() ? 'command' : 'alt'
Mousetrap.bind([`${key}+1`], function (e) {
var index = ($(window).scrollTop()) / 50;
diff --git a/src/preload.js b/src/preload.js
index 7d32354..d81ec77 100644
--- a/src/preload.js
+++ b/src/preload.js
@@ -47,7 +47,6 @@ compileFile = script => {
}
}
-isWin = os.platform() == 'win32' ? true : false;
totalMem = os.totalmem();
@@ -55,7 +54,7 @@ tasklist = () =>
new Promise((reslove, reject) => {
{
var tasklist = [];
- if (isWin) {
+ if (utools.isWindows()) {
var binPath = GetFilePath('ProcessKiller.exe');
if(!fs.existsSync(binPath)) compileFile('ProcessKiller.cs')
execFile(binPath, ['getProcess'], { encoding: 'buffer' },(err, stdout, stderr) => {
@@ -66,7 +65,7 @@ tasklist = () =>
});
reslove(data);
})
- } else {
+ } else if(utools.isMacOs()){
exec('ps -A -o pid -o %cpu -o %mem -o user -o comm | sed 1d | sort -rnk 3', (err, stdout, stderr) => {
if(err) reject(utools.showNotification(stderr))
lines = stdout.split('\n');
@@ -81,23 +80,52 @@ tasklist = () =>
});
reslove(tasklist);
});
+ } else {
+ exec('ps -A -o pid -o %cpu -o %mem -o user -o comm:20 -o cmd | sed 1d | sort -rnk 3', (err, stdout, stderr) => {
+ if(err) reject(utools.showNotification(stderr))
+ lines = stdout.split('\n');
+ lines.forEach(line => {
+ if (line) {
+ l = /(\d+)\s+(\d+[\.|\,]\d+)\s+(\d+[\.|\,]\d+)\s+(.*?)\s+(.{20})\s+(.*)/.exec(line);
+ dict = { pid: l[1], cpu: l[2], mem: l[3], usr: l[4], path: l[6], nam: l[5].trim() }
+ tasklist.push(dict);
+ }
+ });
+ reslove(tasklist);
+ });
}
}
})
-taskkill = (pid, restart) =>
- new Promise((reslove, reject) => {
+getLinuxProcPath = pid => {
+ try {
+ return fs.readlinkSync(`/proc/${pid}/exe`)
+ } catch (error) {
+ utools.showNotification(error)
+ return false
+ }
+}
+
+taskkill = (pid, restart) => {
+ try {
+ process.kill(pid);
+ } catch (error) {
+ utools.showNotification('权限不足,请以管理员权限运行uTools');
+ return false
+ }
+ if(restart){
+ var cmd = restart
+ if (!utools.isLinux()) cmd = '"' + cmd + '"'
try {
- process.kill(pid);
- } catch (error) {
- reject(utools.showNotification('权限不足,请以管理员权限运行uTools'));
- }
- if(restart){
+ exec(cmd);
utools.showNotification('重启进程成功!')
- exec(`"${restart}"`);
+ } catch (error) {
+ utools.showNotification(error);
+ return false
}
- reslove(true);
-})
+ }
+ return true
+}
findThirdIndex = (str, cha) => {
var x = str.indexOf(cha);
@@ -121,14 +149,14 @@ icns2Base64 = icns => {
GetIcons = PathList =>
new Promise((reslove, reject) => {
- if (isWin) {
+ if (utools.isWindows()) {
PathList = PathList.join("|").replace("\\", "/");
execFile(GetFilePath('ProcessKiller.exe'), ["getIcons", PathList],{ encoding: 'buffer' },(error, stdout, stderr) => {
if(error) reject(utools.showNotification(iconv.decode(stderr, 'gb18030')));
data = JSON.parse(iconv.decode(stdout, 'gb18030'));
reslove(data);
});
- } else {
+ } else if(utools.isMacOs()){
data = []
PathList.forEach(p => {
var InfoFile = path.join(p, 'Contents', 'Info.plist');
@@ -145,4 +173,4 @@ GetIcons = PathList =>
})
reslove(data)
}
- })
\ No newline at end of file
+ })