mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	| @@ -18,6 +18,7 @@ local uv = vim.uv | |||||||
| --- @field stderr? string | --- @field stderr? string | ||||||
|  |  | ||||||
| --- @class SystemState | --- @class SystemState | ||||||
|  | --- @field cmd string[] | ||||||
| --- @field handle? uv.uv_process_t | --- @field handle? uv.uv_process_t | ||||||
| --- @field timer?  uv.uv_timer_t | --- @field timer?  uv.uv_timer_t | ||||||
| --- @field pid? integer | --- @field pid? integer | ||||||
| @@ -63,11 +64,9 @@ local function new_systemobj(state) | |||||||
|   }, { __index = SystemObj }) |   }, { __index = SystemObj }) | ||||||
| end | end | ||||||
|  |  | ||||||
| --- @param signal integer | --- @param signal integer|string | ||||||
| function SystemObj:kill(signal) | function SystemObj:kill(signal) | ||||||
|   local state = self._state |   self._state.handle:kill(signal) | ||||||
|   state.handle:kill(signal) |  | ||||||
|   close_handles(state) |  | ||||||
| end | end | ||||||
|  |  | ||||||
| local MAX_TIMEOUT = 2 ^ 31 | local MAX_TIMEOUT = 2 ^ 31 | ||||||
| @@ -159,7 +158,7 @@ end | |||||||
|  |  | ||||||
| --- @return table<string,string> | --- @return table<string,string> | ||||||
| local function base_env() | local function base_env() | ||||||
|   local env = vim.fn.environ() |   local env = vim.fn.environ() --- @type table<string,string> | ||||||
|   env['NVIM'] = vim.v.servername |   env['NVIM'] = vim.v.servername | ||||||
|   env['NVIM_LISTEN_ADDRESS'] = nil |   env['NVIM_LISTEN_ADDRESS'] = nil | ||||||
|   return env |   return env | ||||||
| @@ -212,7 +211,7 @@ end | |||||||
| local M = {} | local M = {} | ||||||
|  |  | ||||||
| --- @param cmd string | --- @param cmd string | ||||||
| --- @param opts uv.aliases.spawn_options | --- @param opts uv.spawn.options | ||||||
| --- @param on_exit fun(code: integer, signal: integer) | --- @param on_exit fun(code: integer, signal: integer) | ||||||
| --- @param on_error fun() | --- @param on_error fun() | ||||||
| --- @return uv.uv_process_t, integer | --- @return uv.uv_process_t, integer | ||||||
|   | |||||||
| @@ -54,4 +54,28 @@ describe('vim.system', function() | |||||||
|     end) |     end) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   it('kill processes', function() | ||||||
|  |     exec_lua([[ | ||||||
|  |       local signal | ||||||
|  |       local cmd = vim.system({ 'cat', '-' }, { stdin = true }, function(r) | ||||||
|  |         signal = r.signal | ||||||
|  |       end) -- run forever | ||||||
|  |  | ||||||
|  |       cmd:kill('sigint') | ||||||
|  |  | ||||||
|  |       -- wait for the process not to exist | ||||||
|  |       local done = vim.wait(2000, function() | ||||||
|  |         return signal ~= nil | ||||||
|  |       end) | ||||||
|  |  | ||||||
|  |       assert(done, 'process did not exit') | ||||||
|  |  | ||||||
|  |       -- Check the process is no longer running | ||||||
|  |       vim.fn.systemlist({'ps', 'p', tostring(cmd.pid)}) | ||||||
|  |       assert(vim.v.shell_error == 1, 'dwqdqd '..vim.v.shell_error) | ||||||
|  |  | ||||||
|  |       assert(signal == 2) | ||||||
|  |     ]]) | ||||||
|  |   end) | ||||||
|  |  | ||||||
| end) | end) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Lewis Russell
					Lewis Russell