new matlab functions: background processes via queue_*.m

This commit is contained in:
Sebastian Held 2010-05-12 15:30:18 +02:00
parent 3bdc4650ab
commit e756433aa6
3 changed files with 87 additions and 0 deletions

22
matlab/queue_addProcess.m Normal file
View File

@ -0,0 +1,22 @@
function [pid,filenames] = queue_addProcess( command )
% [pid,filenames] = queue_addProcess( command )
%
% Sebastian Held <sebastian.held@uni-due.de>
% 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);

View File

@ -0,0 +1,25 @@
function [alive,stdout,stderr] = queue_checkProcess( pid, filenames )
% [alive,stdout,stderr] = queue_checkProcess( pid )
%
% Sebastian Held <sebastian.held@uni-due.de>
% 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);

40
matlab/queue_delProcess.m Normal file
View File

@ -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 <sebastian.held@uni-due.de>
% 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