From e756433aa65db015a29d0e040ef3c10d32cf07aa Mon Sep 17 00:00:00 2001 From: Sebastian Held Date: Wed, 12 May 2010 15:30:18 +0200 Subject: [PATCH] new matlab functions: background processes via queue_*.m --- matlab/queue_addProcess.m | 22 ++++++++++++++++++++ matlab/queue_checkProcess.m | 25 +++++++++++++++++++++++ matlab/queue_delProcess.m | 40 +++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 matlab/queue_addProcess.m create mode 100644 matlab/queue_checkProcess.m create mode 100644 matlab/queue_delProcess.m diff --git a/matlab/queue_addProcess.m b/matlab/queue_addProcess.m new file mode 100644 index 0000000..73d4e14 --- /dev/null +++ b/matlab/queue_addProcess.m @@ -0,0 +1,22 @@ +function [pid,filenames] = queue_addProcess( command ) +% [pid,filenames] = queue_addProcess( command ) +% +% Sebastian Held +% 12.5.2010 + +if ~isunix + error 'your OS is not supported (Unix only)' +end + +if nargout > 1 + filenames.stdout = tempname; + filenames.stderr = tempname; +else + filenames.stdout = '/dev/null'; + filenames.stderr = '/dev/null'; +end + +cmd = ['(' command ') >' filenames.stdout ' 2>' filenames.stderr ' & echo $!' ]; +[~,result] = unix( cmd ); + +pid = str2double(result); diff --git a/matlab/queue_checkProcess.m b/matlab/queue_checkProcess.m new file mode 100644 index 0000000..71f4a8c --- /dev/null +++ b/matlab/queue_checkProcess.m @@ -0,0 +1,25 @@ +function [alive,stdout,stderr] = queue_checkProcess( pid, filenames ) +% [alive,stdout,stderr] = queue_checkProcess( pid ) +% +% Sebastian Held +% 12.5.2010 + +if ~isunix + error 'your OS is not supported (Unix only)' +end + +if nargout > 1 + fid = fopen( filenames.stdout ); + stdout = fread(fid); + fclose(fid); +end +if nargout > 2 + fid = fopen( filenames.stderr ); + stderr = fread(fid); + fclose(fid); +end + +cmd = ['ps --no-headers -p' num2str(pid) ]; +[status,~] = unix( cmd ); + +alive = (status == 0); diff --git a/matlab/queue_delProcess.m b/matlab/queue_delProcess.m new file mode 100644 index 0000000..39ab45c --- /dev/null +++ b/matlab/queue_delProcess.m @@ -0,0 +1,40 @@ +function [stdout,stderr] = queue_delProcess( pid, filenames ) +% [stdout,stderr] = queue_delProcess( pid, filenames ) +% +% if pid == 0, do not kill a process, but clean up files +% +% Sebastian Held +% 12.5.2010 + +if ~isunix + error 'your OS is not supported (Unix only)' +end + +if pid ~= 0 + alive = queue_checkProcess( pid ); + + if alive + unix( ['kill ' num2str(pid)] ); + alive = queue_checkProcess( pid ); + end + if alive + pause(1) + unix( ['kill ' num2str(pid)] ); + alive = queue_checkProcess( pid ); + end + if alive + unix( ['kill -KILL ' num2str(pid)] ); + end +end + +if nargin > 1 + if nargout == 1 + [~,stdout] = queue_checkProcess( pid, filenames ); + end + if nargout == 2 + [~,stdout,stderr] = queue_checkProcess( pid, filenames ); + end + + delete( filenames.stdout ); + delete( filenames.stderr ); +end