diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 52e346b9e8b28b09f521045efd5008b554d94acb..fbc68c420e793c27d00b5eb7aba10031b02f54eb 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -4021,6 +4021,7 @@ static int _job_signal(struct job_record *job_ptr, uint16_t signal,
 
 	/* let node select plugin do any state-dependent signalling actions */
 	select_g_job_signal(job_ptr, signal);
+	last_job_update = now;
 
 	/* save user ID of the one who requested the job be cancelled */
 	if (signal == SIGKILL)
@@ -4038,7 +4039,6 @@ static int _job_signal(struct job_record *job_ptr, uint16_t signal,
 	}
 
 	if (IS_JOB_PENDING(job_ptr) && (signal == SIGKILL)) {
-		last_job_update		= now;
 		job_ptr->job_state	= JOB_CANCELLED;
 		job_ptr->start_time	= now;
 		job_ptr->end_time	= now;
@@ -4205,6 +4205,10 @@ extern int job_str_signal(char *job_id_str, uint16_t signal, uint16_t flags,
 		info("%s: 1 invalid job id %s", __func__, job_id_str);
 		return ESLURM_INVALID_JOB_ID;
 	}
+	if ((end_ptr[0] == '_') && (end_ptr[1] == '*'))
+		end_ptr += 2;	/* Defaults to full job array */
+
+	last_job_update = now;
 	job_id = (uint32_t) long_id;
 	if (end_ptr[0] == '\0') {	/* Single job (or full job array) */
 		int jobs_done = 0, jobs_signalled = 0;
@@ -4286,7 +4290,7 @@ extern int job_str_signal(char *job_id_str, uint16_t signal, uint16_t flags,
 		goto endit;
 	}
 
-	/* Find some job record and validate the user cancelling the job */
+	/* Find some job record and validate the user signalling the job */
 	job_ptr = find_job_record(job_id);
 	if (job_ptr == NULL) {
 		job_ptr = job_array_hash_j[JOB_HASH_INX(job_id)];
@@ -12655,6 +12659,9 @@ extern int job_requeue2(uid_t uid, requeue_msg_t *req_ptr,
 		rc = ESLURM_INVALID_JOB_ID;
 		goto reply;
 	}
+	if ((end_ptr[0] == '_') && (end_ptr[1] == '*'))
+		end_ptr += 2;	/* Defaults to full job array */
+
 	job_id = (uint32_t) long_id;
 	if (end_ptr[0] == '\0') {	/* Single job (or full job array) */
 		struct job_record *job_ptr_done = NULL;