diff --git a/Misc/NEWS b/Misc/NEWS
index 358d6ed..ba1e7e4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -302,6 +302,10 @@
 Library
 -------
 
+- Issue #1983: Fix functions taking or returning a process identifier to use
+  the dedicated C type ``pid_t`` instead of a C ``int``. Some platforms have
+  a process identifier type wider than the standard C integer type.
+
 - Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket.
   Patch by Farhan Ahmad, test by Marcin Bachry.
 
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index c6481ac..81110c2 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -311,6 +311,25 @@
 #define WAIT_STATUS_INT(s) (s)
 #endif /* UNION_WAIT */
 
+/* Issue #1983: pid_t can be longer than a C long on some systems */
+#ifdef SIZEOF_PID_T
+#if SIZEOF_PID_T == SIZEOF_INT
+#define PARSE_PID "i"
+#define PyLong_FromPid PyInt_FromLong
+#define PyLong_AsPid PyInt_AsLong
+#elif SIZEOF_PID_T == SIZEOF_LONG
+#define PARSE_PID "l"
+#define PyLong_FromPid PyInt_FromLong
+#define PyLong_AsPid PyInt_AsLong
+#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG
+#define PARSE_PID "L"
+#define PyLong_FromPid PyLong_FromLongLong
+#define PyLong_AsPid PyInt_AsLongLong
+#else
+#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)"
+#endif
+#endif /* SIZEOF_PID_T */
+
 /* Don't use the "_r" form if we don't need it (also, won't have a
    prototype for it, at least on Solaris -- maybe others as well?). */
 #if defined(HAVE_CTERMID_R) && defined(WITH_THREAD)
@@ -3704,7 +3723,7 @@
 		return posix_error();
 	if (pid == 0)
 		PyOS_AfterFork();
-	return PyInt_FromLong(pid);
+	return PyLong_FromPid(pid);
 }
 #endif
 
@@ -3723,7 +3742,7 @@
 		return posix_error();
 	if (pid == 0)
 		PyOS_AfterFork();
-	return PyInt_FromLong(pid);
+	return PyLong_FromPid(pid);
 }
 #endif
 
@@ -3833,7 +3852,7 @@
 		return posix_error();
 	if (pid == 0)
 		PyOS_AfterFork();
-	return Py_BuildValue("(li)", pid, master_fd);
+	return Py_BuildValue("(Ni)", PyLong_FromPid(pid), master_fd);
 }
 #endif
 
@@ -4050,7 +4069,7 @@
 {
 	pid_t pid;
 	int sig;
-	if (!PyArg_ParseTuple(args, "ii:kill", &pid, &sig))
+	if (!PyArg_ParseTuple(args, PARSE_PID "i:kill", &pid, &sig))
 		return NULL;
 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
     if (sig == XCPT_SIGNAL_INTR || sig == XCPT_SIGNAL_BREAK) {
@@ -4619,7 +4638,7 @@
 		ins_rc[0]  = ins_rc[1]  = ins_rc[2]  = 0;
 
 		procObj = PyList_New(2);
-		pidObj = PyInt_FromLong((long) pipe_pid);
+		pidObj = PyLong_FromPid(pipe_pid);
 		intObj = PyInt_FromLong((long) file_count);
 
 		if (procObj && pidObj && intObj)
@@ -4745,7 +4764,7 @@
 		    (pidObj = PyList_GetItem(procObj,0)) != NULL &&
 		    (intObj = PyList_GetItem(procObj,1)) != NULL)
 		{
-			pipe_pid = (int) PyInt_AsLong(pidObj);
+			pipe_pid = (pid_t) PyLong_AsPid(pidObj);
 			file_count = (int) PyInt_AsLong(intObj);
 
 			if (file_count > 1)
@@ -5862,7 +5881,7 @@
 		return NULL;
 	}
 
-	return Py_BuildValue("iiN", pid, status, result);
+	return Py_BuildValue("NiN", PyLong_FromPid(pid), status, result);
 }
 #endif /* HAVE_WAIT3 || HAVE_WAIT4 */
 
@@ -5905,7 +5924,7 @@
 	WAIT_TYPE status;
 	WAIT_STATUS_INT(status) = 0;
 
-	if (!PyArg_ParseTuple(args, "ii:wait4", &pid, &options))
+	if (!PyArg_ParseTuple(args, PARSE_PID "i:wait4", &pid, &options))
 		return NULL;
 
 	Py_BEGIN_ALLOW_THREADS
@@ -5929,7 +5948,7 @@
 	WAIT_TYPE status;
 	WAIT_STATUS_INT(status) = 0;
 
-	if (!PyArg_ParseTuple(args, "ii:waitpid", &pid, &options))
+	if (!PyArg_ParseTuple(args, PARSE_PID "i:waitpid", &pid, &options))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
 	pid = waitpid(pid, &status, options);
@@ -5937,7 +5956,7 @@
 	if (pid == -1)
 		return posix_error();
 
-	return Py_BuildValue("ii", pid, WAIT_STATUS_INT(status));
+	return Py_BuildValue("Ni", PyLong_FromPid(pid), WAIT_STATUS_INT(status));
 }
 
 #elif defined(HAVE_CWAIT)
@@ -5953,7 +5972,7 @@
 	Py_intptr_t pid;
 	int status, options;
 
-	if (!PyArg_ParseTuple(args, "ii:waitpid", &pid, &options))
+	if (!PyArg_ParseTuple(args, PARSE_PID "i:waitpid", &pid, &options))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
 	pid = _cwait(&status, pid, options);
@@ -5962,7 +5981,7 @@
 		return posix_error();
 
 	/* shift the status left a byte so this is more like the POSIX waitpid */
-	return Py_BuildValue("ii", pid, status << 8);
+	return Py_BuildValue("Ni", PyLong_FromPid(pid), status << 8);
 }
 #endif /* HAVE_WAITPID || HAVE_CWAIT */
 
@@ -5984,7 +6003,7 @@
 	if (pid == -1)
 		return posix_error();
 
-	return Py_BuildValue("ii", pid, WAIT_STATUS_INT(status));
+	return Py_BuildValue("Ni", PyLong_FromPid(pid), WAIT_STATUS_INT(status));
 }
 #endif
 
@@ -6175,7 +6194,7 @@
 {
 	pid_t pid;
 	int sid;
-	if (!PyArg_ParseTuple(args, "i:getsid", &pid))
+	if (!PyArg_ParseTuple(args, PARSE_PID ":getsid", &pid))
 		return NULL;
 	sid = getsid(pid);
 	if (sid < 0)
@@ -6210,7 +6229,7 @@
 {
 	pid_t pid;
 	int pgrp;
-	if (!PyArg_ParseTuple(args, "ii:setpgid", &pid, &pgrp))
+	if (!PyArg_ParseTuple(args, PARSE_PID "i:setpgid", &pid, &pgrp))
 		return NULL;
 	if (setpgid(pid, pgrp) < 0)
 		return posix_error();
@@ -6235,7 +6254,7 @@
 	pgid = tcgetpgrp(fd);
 	if (pgid < 0)
 		return posix_error();
-	return PyInt_FromLong((long)pgid);
+	return PyLong_FromPid(pgid);
 }
 #endif /* HAVE_TCGETPGRP */
 
